PendingIntent 不是通过 Android 14 上的 AlarmManager.setRepeating() 传递的

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

在我的应用程序中,我通过

AlarmManager.setRepeating()
安排每日闹钟。我的方法一直运行完美,直到在 Android 14 设备上进行测试(我使用的是模拟 Pixel 7 Pro)。这是负责调度警报的部分:

val alarmIntent = Intent(app, AlarmReceiver::class.java)

val alarmPendingIntent = PendingIntent.getBroadcast(
    application.applicationContext,
    ALARM_REQUEST_CODE,
    alarmIntent,
    PendingIntent.FLAG_UPDATE_CURRENT or
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
                PendingIntent.FLAG_IMMUTABLE
            else 0
)

alarmManager.setRepeating(
    AlarmManager.RTC_WAKEUP,
    alarmTimeInMillis,
    AlarmManager.INTERVAL_DAY,
    alarmPendingIntent
)
<receiver android:name=".AlarmReceiver" />

如您所见,我对警报的

Intent
使用显式
PendingIntent
-
alarmIntent
已传递
BroadcastReceiver
应该显式调用。这与
PendingIntent.getBroadcast()
:

的文档一致

出于安全原因,您在此处提供的

Intent
几乎始终应该是显式意图,即指定要通过
Intent.setClass

传递到的显式组件

现在,尽管 Android 系统处理意图发生了变化,但似乎我的代码在这方面不需要以任何方式进行更改。

我找不到为什么在 Android 14 上闹钟突然停止呼叫我的

AlarmReceiver
的原因。 Android 13 及更低版本中从来没有出现过这种情况,所以这看起来确实是一个全新的问题。

android android-intent broadcastreceiver alarmmanager android-pendingintent
1个回答
0
投票

我可能是错的,但这可能是因为在android 14(API 34)中存在关于意图和广播的新规则。

https://habr.com/ru/companies/broadcast/articles/753704/

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