6

我正在开发 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,它在锁定屏幕上运行。所以仍然可以在锁定屏幕上开始活动,但我可能在那里遗漏了一些东西。

提前谢谢你。

4

1 回答 1

12

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

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

android:showWhenLocked="true"
android:turnScreenOn="true"
于 2018-01-23T15:07:44.387 回答