根据官方文档,用于屏幕锁定/解锁事件的BroadcastReceiver只能从Android O(API 26)开始动态注册(通过从Activity中调用registerReceiver)。在AndroidManifest.xml中注册这些事件不再起作用,因此,当应用未运行时(先前已被Android终止或由用户强制关闭),该应用将不再能够接收这些事件(ACTION_SCREEN_ON / ACTION_USER_PRESENT)。
帖子中也提到了相同的内容: Android - detect phone unlock event, not screen on
还有其他其他可靠且可行的方式来获取屏幕锁定/解锁事件吗?
尝试通过在应用的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
}
}
}