加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Android之世面上程序锁的达成

发布时间:2021-11-24 20:42:43 所属栏目:教程 来源:互联网
导读:当我们为程序设置密码后,当我们第一次进入该程序时就会提示我们输入密码,输入正确密码后就可以继续访问该程序,如果再次访问该程序就不会提示我们输入密码,这就是市面上常见程序锁的实现。 开发思路: 1. 开启服务,在服务中开启一个死循环,这个死循环用

当我们为程序设置密码后,当我们第一次进入该程序时就会提示我们输入密码,输入正确密码后就可以继续访问该程序,如果再次访问该程序就不会提示我们输入密码,这就是市面上常见程序锁的实现。
 
开发思路:
 
1. 开启服务,在服务中开启一个死循环,这个死循环用来检测当前访问的程序是不是被加锁的程序,如果是则弹出输入密码对话框。这里采用数据库来保存被加锁的程序。
 
2. 密码被保存在xml 中,如果匹配密码后则进入程序界面。
 
3.用一个boolean变量来防止多次进入同一个程序而导致显示密码对话框。
 
关键代码:
 
核心代码
 
public void onCreate() {  
    //dao   
    lockAppDao = new LockAppDao(getApplicationContext());  
    //从数据库获取到程序锁的集合   
    blockapppacks = lockAppDao.findAll();  
    //获取程序锁集合和程序锁当前状态是否已经打开   
    blockappinfos = new ArrayList<LockAppInfo>();  
    fillData(blockapppacks);  
    // 得到activity的管理器   
    activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);  
    intent = new Intent(this, EnterPasswordActivity.class);  
    // 在新的任务栈中创建 activity的实例   
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
    new Thread() {  
        @Override  
        public void run() {  
            // 看门狗, 不停的查看当前activity任务栈的栈顶   
            while (true) {  
                // 首先获取到最上面的任务栈, get(0) 获取到任务栈栈顶的activity   
                String packname = activityManager.getRunningTasks(1).get(0).topActivity  
                        .getPackageName();  
                for (LockAppInfo apppackinfo : blockappinfos) {  
                    if (packname.equals(apppackinfo.getPackname())) {  
                        //防止重复弹出密码对话框   
                        if (!apppackinfo.isFlagcanstart()) {  
                            // 弹出密码对话框,弹出新的activity 覆盖当前要启动的activity   
                            intent.putExtra("packagename", packname);  
                            startActivity(intent);  
                        }  
                    }  
                }  
                try {  
                    Thread.sleep(200);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }.start();  
    super.onCreate();  
}  
  
private void fillData(List<String> blockapppacks2) {  
    for(String blockapp :blockapppacks2 ){  
        LockAppInfo info = new LockAppInfo();  
        info.setPackname(blockapp);  
        info.setFlagcanstart(false);  
        blockappinfos.add(info);  
    }  
}  
匹配密码
 
public void entry(View view){  
    System.out.println("123");  
    String password = et_password.getText().toString();   
    String pwd = sp.getString("lock_app_pwd", "");  
    Intent intent = getIntent();  
    if (password.equals(pwd)){  
        if(intent!=null){  
            String packname =  intent.getStringExtra("packagename");  
            Log.i(TAG,packname);  
            iLockService.stopLockAppFlag(packname);  
        }  
        finish();  
    }  
}  
输入密码时屏蔽后退键
 
// 屏蔽用户按后退键   
@Override  
public boolean onKeyDown(int keyCode, KeyEvent event) {  
    // TODO Auto-generated method stub   
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {  
        return true;  
    }  
    return super.onKeyDown(keyCode, event);  
}  
 

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读