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

匹配密码

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


  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
实现 Android 程序,可以考虑以下步骤: 1. 创建一个服务(Service),监听应用程序的启动和关闭事件。 2. 在服务中,获取用户设置的应用程序密码或图案,并保存到本地。 3. 在应用程序启动,弹出密码或图案验证界面,让用户输入密码或绘制图案。 4. 如果输入的密码或图案与保存的密码或图案匹配,则允许应用程序启动,否则禁止启动。 具体实现可以参考以下步骤: 1. 创建一个继承自 Service 的类,并在 onCreate 方法中注册一个 BroadcastReceiver,用于监听应用程序的启动和关闭事件。 2. 在 BroadcastReceiver 的 onReceive 方法中,获取当前启动的应用程序包名,并判断是否需要验证密码或图案。 3. 如果需要验证密码或图案,则启动一个新的 Activity,用于接收用户输入密码或绘制图案,并将输入的密码或图案保存到本地。 4. 在验证密码或图案的 Activity 中,根据用户输入的密码或图案,判断是否和保存的密码或图案匹配。 5. 如果匹配,则在 Activity 的 onDestroy 方法中发送一个广播,告知 Service 允许应用程序启动。 6. 如果不匹配,则在 Activity 的 onDestroy 方法中发送一个广播,告知 Service 禁止应用程序启动。 需要注意的是,由于 Android 限制了对其他应用程序的控制,因此实现程序的过程中需要使用一些特殊的权限或技巧。例如,可以使用 AccessibilityService 获取其他应用程序的界面信息,并判断是否需要验证密码或图案。此外,还需要处理一些特殊情况,例如应用程序从通知栏启动或从桌面图标启动等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傅荣康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值