根据官方文档,只能从Android O(API 26)开始动态注册屏幕锁定/解锁事件的BroadcastReceiver(通过在Activity中调用registerReceiver)。在AndroidManifest.xml中注册这些事件不再起作用,因此,当应用程序不运行时(先前已被Android终止或被用户强制关闭),该应用程序将不再能够接收这些事件(ACTION_SCREEN_ON / ACTION_USER_PRESENT)。
帖子中也提到了同样的问题: Android-检测手机解锁事件,而不是屏幕显示
是否还有其他其他可靠且可行的方式来获取屏幕锁定/解锁事件?
通过在应用程序的AndroidManifest .xml文件中注册ACTION_USER_PRESENT,尝试隐式广播以接收屏幕锁定/解锁事件。但是根据文档,除了某些例外情况之外,不当广播都是行不通的。您必须在活动类中使用registerReceiver的动态注册来执行此操作。因此,如果该应用被Android操作系统杀死,或者被用户强行停止,则该应用不会收到屏幕锁定/解锁广播。
活动类动态广播接收机
registerReceiver(new PhoneUnlockedReceiver(),
new IntentFilter("android.intent.action.USER_PRESENT"));
public class PhoneUnlockedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(
Context.KEYGUARD_SERVICE);
if (keyguardManager.isKeyguardSecure()) {
//phone was unlocked, add handling here
}
}
}
Run Code Online (Sandbox Code Playgroud) Android 具有硬件支持安全性的概念,如 TEE,在最新的 Android 中,即 Android Pie 设备可以具有 HSM(Strongbox)。
1.TEE和HSM的实际区别是什么?
2.Android HSM 是否可以用作密码学解决方案,例如 Whitebox 解决方案?