Oreo(8.1)无法在锁定屏幕上启动活动

San*_*dak 4 android android-service android-fragments android-activity android-8.1-oreo

我正在研究NFC支付应用程序.即使设备被锁定,屏幕打开时也可以付款.与Android Pay基本相同的行为.付款后,我想向用户显示胜利屏幕,告知他付款结果 - 完成,错误,引脚请求等.

我把它添加到清单中

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
Run Code Online (Sandbox Code Playgroud)

在onCreate我正在设置这个标志

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
            | WindowManager.LayoutParams.FLAG_FULLSCREEN
            | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

它在大多数设备上运行良好.但是一旦我将Nexus 5X更新到Android 8.1,它就停止了工作.NFC交易在后台完成,没有任何问题,但当我的手机处于锁定屏幕且屏幕打开时,根本不显示胜利屏幕.当5X解锁时,它会毫无问题地启动活动.然后我发现只有当应用程序没有在后台运行时才会起作用(当我进入设置并强制停止我的应用程序时).当我打开应用程序并将其保留在后台时,然后锁定我的手机并打开屏幕 - 它正在工作.但是当应用程序根本没有运行时 - 它将不会显示我的活动.在其他设备上,例如带有Andorid 7.0的三星S8,即使我强制停止我的活动并锁定手机也能正常工作.

我使用Android 8.1在5X上测试了Android Pay,它正在使用锁定屏幕.因此仍然可以在锁定屏幕上启动活动,但我可能在那里遗漏了一些东西.

先谢谢你.

Ben*_*min 10

在Android 8.1(API 27),WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKEDWindowManager.LayoutParams.FLAG_TURN_SCREEN_ON已被弃用.

您现在应该activity在清单中的条目中添加以下内容:

android:showWhenLocked="true"
android:turnScreenOn="true"
Run Code Online (Sandbox Code Playgroud)