安卓开发——锁定软件——输入密码后重复弹出输入密码窗口的解决方法
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);
}
}
}
相关文章
- 《暗黑世界》安卓APK 编译流程详细说明教程!(图文)
- 用照片和文字记录的安卓手机便签有哪些?
- 安卓手机便签快捷预设提醒日期配置怎么删除?
- 安卓手机怎么提取图片中的文字?
- 安卓手机的便签怎么恢复数据?
- Win7下搭建安卓android开发环境
- IOS和安卓ui设计常用尺寸及基本知识
- ②安卓学习(分享案例):迷彩灯 图片切换 跟随手指的圈
- mac下的安卓模拟器——bluestacks
- EasyPlayer-RTSP-Android安卓播放器播放RTSP延迟优化策略,极低延时!
- EasyPlayer Android安卓RTSP服务器低延时再优化策略
- EasyPlayer RTSP安卓Android播放器架构简析
- 安卓逆向7,frida小练习,hook java 层密码校验函数,绕过密码验证,进入下一个界面
- 安卓逆向2,安卓的apk加载的流程
- 谷歌地图安卓开发环境配置
- 华为:鸿蒙OS不是安卓和iOS的拷贝;胡润世界500强榜发布:苹果第一,腾讯第六