如何可靠地获取API Level> = 26的屏幕解锁事件?

时间:2019-01-04 09:15:45

标签: android android-api-levels

根据官方文档,用于屏幕锁定/解锁事件的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          

            }
        }
}

0 个答案:

没有答案