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

时间:2018-01-23 15:04:28

标签: android android-fragments android-activity android-service android-8.1-oreo

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

我将此添加到清单

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

在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);

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

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

先谢谢你。

1 个答案:

答案 0 :(得分:7)

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

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

android:showWhenLocked="true"
android:turnScreenOn="true"