在我的应用程序中,我通过
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 14(API 34)中存在关于意图和广播的新规则。