在判断输入的密码正确后,发送一个广播
//进行输入密码的验证
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);
}
}
}
安卓开发——锁定软件——输入密码后重复弹出输入密码窗口的解决方法
最新推荐文章于 2023-12-05 18:28:06 发布