效果是当应用加锁了,第一次进入的时候,设置密码:
当第二次进入加锁的应用时,输入密码就可以了:
当密码输入正确的时候,采用发送自定义广播的方式(组件之间的通信)通知看门狗不需要保护这个程序:
Intent intent = new Intent();
intent.setAction("com.ustc.mobilemanager.TEMPSTOP");
intent.putExtra("packageName", packageName);
sendBroadcast(intent);
finish();
服务里注册:
registerReceiver(offReceiver,
new IntentFilter(Intent.ACTION_SCREEN_OFF));
receiver = new InnerReceiver();
private class InnerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "接受到了临时停止保护广播的事件");
tempStopProtectPackageName = intent.getStringExtra("packageName");
}
}
if (dao.find(packageName)) {
// 判断这个程序是否需要临时的停止保护
if (packageName.equals(tempStopProtectPackageName)) {
} else {
// 当前应用需要保护,弹出来一个输入密码的界面
Intent intent = new Intent(getApplicationContext(),
EnterPwdActivity.class);
// 服务是没有任务栈的,在服务中开启activity,要指定这个activity运行的任务栈
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", packageName);
startActivity(intent);
}
}
我们在锁屏的时候,再次解锁时,需要输入密码:
private class ScreenOffReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
tempStopProtectPackageName = null;
}
}
将临时的包名置空就可以了。