我正在为 Android 构建一个闹钟应用程序,当手机锁定时闹钟响起时,我尝试从通知启动全屏意图(如文档所示)。它在运行 Android 13 的三星 A51 上运行没有问题,但在运行 Android 14 的 Pixel 8 Pro 上却无法运行。在 Android 14 上,我收到通知,但屏幕无法唤醒,并且没有全屏意图。但是,当我解锁手机并再次锁定它而通知仍然存在时,我得到了全屏意图。
我使用 Jetpack Compose 设置了一项活动。 BroadcastReceiver 只是创建通知和意图来打开主活动(稍后将导航到警报屏幕),如下所示:
val notificationManager = context?.getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)
val alarmIntent = Intent(context, MainActivity::class.java)
alarmIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
val options = ActivityOptions.makeBasic().setPendingIntentCreatorBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
// Create a pending intent with the above intent
val fullScreenPendingIntent = PendingIntent.getActivity(
context, 0, alarmIntent, PendingIntent.FLAG_IMMUTABLE, options.toBundle()
)
val builder = NotificationCompat.Builder(context!!, "alarm_channel")
.setSmallIcon(android.R.drawable.ic_lock_idle_alarm)
.setContentTitle("My notification")
.setContentText("Hello World!")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setCategory(NotificationCompat.CATEGORY_ALARM)
.setOngoing(true)
.setFullScreenIntent(fullScreenPendingIntent, true)
// Build the notification
// Show the notification
with(NotificationManagerCompat.from(context)) {
notify(Random().nextInt(32), builder.build())
}
这是我尝试过的:
setShowWhenLocked(true)
setTurnScreenOn(true)
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
Permissions in manifest: USE_EXACT_ALARM, POST_NOTIFICATIONS, USE_FULL_SCREEN_INTENT
MainActivity manifest: android:showWhenLocked="true", android:turnScreenOn="true", android:showForAllUsers="true, android:launchMode="singleInstance"
pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK or PowerManager.FULL_WAKE_LOCK, TAG).acquire(TIMEOUT)
老实说我很茫然。我知道他们在 Android 14 中引入了对全屏意图的限制,但据我了解,只要我有权限就应该没问题
USE_FULL_SCREEN_INTENT
。我什至升级到 Android 15 Beta,看看这是否只是一个错误,但情况是一样的。
我猜这与屏幕/CPU 未激活有关,但我尝试了所有能找到的方法,但没有成功。
WakeLock 对我有用,尝试使用这些标志:
PowerManager.ACQUIRE_CAUSES_WAKEUP or PowerManager.ON_AFTER_RELEASE or PowerManager.SCREEN_BRIGHT_WAKE_LOCK
在 Android 14 及更高版本上,还记得添加这些权限:
android.Manifest.permission.TURN_SCREEN_ON
参考:文档