Oreo (8.1) 无法在锁定屏幕上启动 activity
Oreo (8.1) cannot start activity on lock screen
我正在开发 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 交易在后台完成,没有任何问题,但是当我的 phone 处于锁定屏幕并打开屏幕时,胜利屏幕根本不显示。当 5X 解锁时,它可以毫无问题地启动 activity。
然后我发现只有当应用程序不在后台 运行 时它才不工作(当我进入设置并强制停止我的应用程序时)。当我打开应用程序并将其留在后台时,然后锁定我的 phone 并打开屏幕 - 它正在运行。但是当应用程序根本不是 运行 时 - 它不会显示我的 activity。
在 Samsung S8 和 Andorid 7.0 等其他设备上,即使我强行停止 activity 并锁定 phone,它也能正常工作。
我用 Android 8.1 测试了 Android Pay on 5X 并且它可以在锁定屏幕上运行。所以仍然可以在锁定屏幕上启动 activity,但我可能在那里遗漏了一些东西。
先谢谢你。
在 Android 8.1 (API 27) 上,WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
和 WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
已被弃用。
您现在应该将以下内容添加到清单中的 activity
条目中:
android:showWhenLocked="true"
android:turnScreenOn="true"
我正在开发 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 交易在后台完成,没有任何问题,但是当我的 phone 处于锁定屏幕并打开屏幕时,胜利屏幕根本不显示。当 5X 解锁时,它可以毫无问题地启动 activity。 然后我发现只有当应用程序不在后台 运行 时它才不工作(当我进入设置并强制停止我的应用程序时)。当我打开应用程序并将其留在后台时,然后锁定我的 phone 并打开屏幕 - 它正在运行。但是当应用程序根本不是 运行 时 - 它不会显示我的 activity。 在 Samsung S8 和 Andorid 7.0 等其他设备上,即使我强行停止 activity 并锁定 phone,它也能正常工作。
我用 Android 8.1 测试了 Android Pay on 5X 并且它可以在锁定屏幕上运行。所以仍然可以在锁定屏幕上启动 activity,但我可能在那里遗漏了一些东西。
先谢谢你。
在 Android 8.1 (API 27) 上,WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
和 WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
已被弃用。
您现在应该将以下内容添加到清单中的 activity
条目中:
android:showWhenLocked="true"
android:turnScreenOn="true"