这是一个 Android 12 (API 31) 引入的变化,从 Android 12 开始,PendingIntent 需要显式指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 标志,来确保 PendingIntent 的安全性。
解决方法:
你需要在创建 PendingIntent 的时候,指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 标志。一般情况下,如果你不需要修改 PendingIntent 的内容,使用 FLAG_IMMUTABLE 是最合适的。
修改 PendingIntent 的代码:
假设你当前的代码如下:
val pendingIntent = PendingIntent.getActivity(
this,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT // 你的现有代码
)
你只需添加 FLAG_IMMUTABLE:
val pendingIntent = PendingIntent.getActivity(
this,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
FLAG_IMMUTABLE 和 FLAG_MUTABLE 的区别:
• FLAG_IMMUTABLE:一旦创建,PendingIntent 的内容就不可更改。这通常是最安全的选择,适用于绝大多数情况。
• FLAG_MUTABLE:PendingIntent 的内容可以被修改,只有当你确实需要动态更改 PendingIntent 的数据时才应使用。