【发布时间】:2022-05-27 21:00:59
【问题描述】:
我的BroadcastReceiver 在交付时没有收到Intent 的附加信息。
这是我创建PendingIntent 的方法
private fun getPendingIntent(type: ReminderType, date: DateTime): PendingIntent {
val context = App.appContext
val intent = Intent(context, TimeBasedRemindersBroadcastReceiver::class.java)
intent.putExtra(ARG_REMINDER_TYPE, type)
intent.putExtra(ARG_DATE_TIME, date)
val intentFlags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
} else {
PendingIntent.FLAG_UPDATE_CURRENT
}
val requestCode = date.dayOfWeek * 100 + type.ordinal
return PendingIntent.getBroadcast(
context,
requestCode,
intent,
intentFlags
)
}
正如你所看到的,一旦 Intent 被初始化,额外的内容就会被清楚地附加。当BroadcastReceiver 被触发时,intent.extras 为空。
经过研究,我只能假设这与 Android 12 和可变意图标志有关。这个问题的所有旧答案似乎都可以通过添加 FLAG_UPDATE_CURRENT 标志来解决它。
我也尝试过使用PendingIntent.FLAG_IMMUTABLE 运行相同的代码,但结果是一样的。
不确定这是否重要,但我正在使用AlarmManager 来传递PendingIntent。
-
@ShlomiKatriel 不幸的是没有。将 String 而不是 Serializable 放入 extras 是我在进行故障排除时尝试的第一件事。
-
@ShlomiKatriel 您的评论实际上最终帮助我找到了解决方案。当我最初使用原始类型进行故障排除时,我的附加功能仍然没有通过。只有在删除有问题的行之后它才开始工作。似乎只有一个失败的序列化就足以让 Intent 失去所有额外内容,而不仅仅是失败的那个。感谢您为我指明正确的方向!
标签: android broadcastreceiver alarmmanager android-pendingintent