Android之世面上程序锁的达成
发布时间:2021-12-18 17:07:49 所属栏目:教程 来源:互联网
导读:当我们为程序设置密码后,当我们第一次进入该程序时就会提示我们输入密码,输入正确密码后就可以继续访问该程序,如果再次访问该程序就不会提示我们输入密码,这就是市面上常见程序锁的实现。 开发思路: 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); } ![]() (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |