Android之世面上程序锁的实现

当我们为程序设置密码后,当我们第一次进入该程序时就会提示我们输入密码,输入正确密码后就可以继续访问该程序,如果再次访问该程序就不会提示我们输入密码,这就是市面上常见程序锁的实现。

开发思路:

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);       }   }  

匹配密码

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wypgjy.html