Android之世面上程序锁的实现

本文详细介绍了如何在程序中实现加锁功能,确保只有在输入正确的密码后才能访问特定程序,通过数据库保存锁信息,并使用线程检测当前运行的程序是否已被加锁,从而在必要时弹出输入密码的对话框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

开发思路:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值