Android之世面上程序锁的实现

来源:互联网 发布:淘宝运营投资计划表 编辑:程序博客网 时间:2024/06/06 08:49

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

开发思路:

1. 开启服务,在服务中开启一个死循环,这个死循环用来检测当前访问的程序是不是被加锁的程序,如果是则弹出输入密码对话框。这里采用数据库来保存被加锁的程序。

2. 密码被保存在xml 中,如果匹配密码后则进入程序界面。

3.用一个boolean变量来防止多次进入同一个程序而导致显示密码对话框。

关键代码:

核心代码

public void onCreate() {//daolockAppDao = 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() {@Overridepublic void run() {// 看门狗, 不停的查看当前activity任务栈的栈顶while (true) {// 首先获取到最上面的任务栈, get(0) 获取到任务栈栈顶的activityString packname = activityManager.getRunningTasks(1).get(0).topActivity.getPackageName();for (LockAppInfo apppackinfo : blockappinfos) {if (packname.equals(apppackinfo.getPackname())) {//防止重复弹出密码对话框if (!apppackinfo.isFlagcanstart()) {// 弹出密码对话框,弹出新的activity 覆盖当前要启动的activityintent.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();}}


输入密码时屏蔽后退键

// 屏蔽用户按后退键@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubif (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {return true;}return super.onKeyDown(keyCode, event);}


原创粉丝点击