我正在研究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,它正在使用锁定屏幕。所以仍然可以在锁定屏幕上开始活动,但我可能在那里遗漏了一些东西。
先谢谢你。
答案 0 :(得分:7)
在Android 8.1(API 27)上,WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
和WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
已被弃用。
您现在应该将以下内容添加到清单中的activity
条目中:
android:showWhenLocked="true"
android:turnScreenOn="true"