zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

安卓开发——锁定软件——输入密码后重复弹出输入密码窗口的解决方法

2023-09-11 14:14:55 时间
在判断输入的密码正确后,发送一个广播
//进行输入密码的验证
				if(new MD5Utils().digestPassWord(_intput_password).equals(password)){
					//发送一个广播 
					//然后到服务中去注册 广播  
					Intent intent2 = new Intent();
					intent2.setAction("openlock.to.home.table");
					//将相关应用的包名传递过去
					intent2.putExtra("package", packageName);
					sendBroadcast(intent2);
					//隐藏对话框
					alertDialog.dismiss();
					//关闭输入密码的对话框 
					finish();
				}else{
Toast.makeText(mContext, "密码不正确 请重新输入 …… ", 0).show();
					return;
				}

在服务中代码注册广播接受者,在广播接受者的onreceive方法获取传递包名

//用来接收锁定屏幕的广播 
	public class SoftLockScreenRecever extends BroadcastReceiver{
		@Override
		public void onReceive(Context context, Intent intent) {
			//获取锁定屏幕的后传过来的包名 
			softlockPackage = null;
		}
	}
//用来接收锁定应用程序输入正确密码后发送的广播 
	public class SoftLockOpenRecever extends BroadcastReceiver{
		@Override
		public void onReceive(Context arg0, Intent intent) {
			//获取解锁后传过来的包名 
			softlockPackage = intent.getStringExtra("package");
		}
	}

在服务 的Oncreate方法中注册广播 

public void onCreate() {
		super.onCreate();
		//注册解锁 广播接受 者 
		softLockOpenRecever = new SoftLockOpenRecever();
		IntentFilter intentFilter_openLockFilter = new IntentFilter();
	intentFilter_openLockFilter.addAction("openlock.to.home.table");
		registerReceiver(softLockOpenRecever, intentFilter_openLockFilter);
		
		//注册锁屏广播接受者
		softLockScreenRecever = new SoftLockScreenRecever();
		IntentFilter soft_lock_screen = new IntentFilter();
		soft_lock_screen.addAction(Intent.ACTION_SCREEN_OFF);
		registerReceiver(softLockScreenRecever, soft_lock_screen);
		activityManager = (ActivityManager) getApplication().getSystemService(getApplication().ACTIVITY_SERVICE);	
在服务的onDestroy方法中注销广播接收者

@Override
	public void onDestroy() {
		super.onDestroy();
		//注销广播接收者 
		if (softLockOpenRecever!=null) {
			unregisterReceiver(softLockOpenRecever);
			softLockOpenRecever=null;
		}
		if (softLockScreenRecever!=null) {
			unregisterReceiver(softLockScreenRecever);
			softLockScreenRecever=null;
		}
	}

在弹出输入密码框处进行判断,如果打开的应用已经解锁,那么就不再进行输入密码的操作;
while(isLock){
					//获取正在运行的程序 
					List<RunningTaskInfo> runningAppProcesses = activityManager.getRunningTasks(1);
				
				for (RunningTaskInfo runningAppProcessInfo : runningAppProcesses) {
				ComponentName componentName =  runningAppProcessInfo.baseActivity;
						
			packageName = componentName.getPackageName();
						
						//判断一下是不是要锁定的程序   
			boolean contains = queryAllSoftLock.contains(packageName);
			if (contains) {
				//进行判断 ,如果 应用 解锁后,就不再去拦截 
			if (!packageName.equals(softlockPackage)) {
								Intent intent = new Intent(SoftLockService.this,SoftLockInputPassword.class);
								intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	intent.putExtra("package", packageName);
	startActivity(intent);
							}
						}
					}