全屏 Intent 在 Android 14 上无法打开

问题描述 投票:0回答:1

我正在为 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 未激活有关,但我尝试了所有能找到的方法,但没有成功。

android kotlin android-intent alarmmanager wakelock
1个回答
0
投票

WakeLock 对我有用,尝试使用这些标志:

PowerManager.ACQUIRE_CAUSES_WAKEUP or PowerManager.ON_AFTER_RELEASE or PowerManager.SCREEN_BRIGHT_WAKE_LOCK

在 Android 14 及更高版本上,还记得添加这些权限:

android.Manifest.permission.TURN_SCREEN_ON

参考:文档

© www.soinside.com 2019 - 2024. All rights reserved.