提问人:martin1337 提问时间:11/16/2023 最后编辑:martin1337 更新时间:11/17/2023 访问量:50
Android 14 中的 PendingIntent 标志更改
PendingIntent flag changes in Android 14
问:
我想在应用程序中为我的通知注册 PendingIntent(它们用作带有倒计时的小部件或确切时间的警报声音,可以根据状态更新或取消)。
这是我到目前为止使用的代码:
val alarmPendingIntentFlag = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE){
//WHAT TO DO HERE
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
} else { PendingIntent.FLAG_UPDATE_CURRENT }
alarmPendingIntent = PendingIntent.getBroadcast(this, 0,Intent(ALARM_ACTION), alarmPendingIntentFlag)
registerReceiver(alarmReceiver, IntentFilter(ALARM_ACTION))
我不得不为 Android 11+ 更改它
PendingIntent.FLAG_UPDATE_CURRENT
自。PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
现在我又遇到了 Android 14 的问题。
以 U+(版本 34 及更高版本)为目标不允许创建或检索 带有 FLAG_MUTABLE 的 PendingIntent,内部和外部的隐式 Intent FLAG_NO_CREATE和FLAG_ALLOW_UNSAFE_IMPLICIT_INTENT安全 原因。要检索已存在的 PendingIntent,请使用 但是,FLAG_NO_CREATE创建一个新的 PendingIntent,其中包含 隐式 Intent 使用FLAG_IMMUTABLE。
那么,如何为 Android 14 更新此功能,以便在需要更新时使用新数据更新意图的当前功能?
有但不确定这是否是可行的方法。PendingIntent.FLAG_ALLOW_UNSAFE_IMPLICIT_INTENT
答:
您不需要使用 .您可以放心使用 .您无需使用即可替换(通过)中的“额外内容”。PendingIntent.FLAG_MUTABLE
PendingIntent.FLAG_IMMUTABLE
FLAG_MUTABLE
PendingIntent
PendingIntent.UPDATE_CURRENT
FLAG_MUTABLE
仅当 由您传递给其他应用程序的 包装 允许由该应用程序修改时(通常通过添加“额外”、数据等),当其他应用程序实际发送 .请参阅 PendingIntent.send() 和 Intent.fillin()
的文档Intent
PendingIntent
Intent
在不改变任何逻辑的情况下,最简单的方法是将意图从隐式更改为显式。
您不能指定类名来实现这一点,因为这不适用于动态注册的接收器。
所以,简单地做
...
val intent = Intent(ALARM_ACTION)
intent.`package` = packageName
alarmPendingIntent = PendingIntent.getBroadcast(this, 0, intent, alarmPendingIntentFlag)
...
(packageName 是 ContextWrapper 的属性,因此是 Activity 的属性)
评论