我正在处理PendingIntent
with notification
。
在我的项目中,我一直在使用PendingIntent.FLAG_UPDATE_CURRENT
在一些代码中。它的定义如下。
Flag表示如果所描述的PendingIntent已经存在,
然后保留它,但用这个新的数据替换它的额外数据
意图。与 getActivity(Context, int, Intent, int) 一起使用,
getBroadcast(Context, int, Intent, int) 和 getService(Context, int,
意图,int)。
如果您要创建只有额外内容的意图,则可以使用此方法
更改,并且不关心任何收到您之前的实体
PendingIntent 将能够使用您的新附加功能启动它,即使
他们没有明确地给予它。
即使设置了 FLAG_IMMUTABLE,FLAG_UPDATE_CURRENT 仍然有效 -
PendingIntent 的创建者可以随时更新 PendingIntent
本身。 IMMUTABLE 标志仅限制更改的能力
调用者通过 send() 发送的意图的语义
发送()。
但我必须在两者之间做出选择FLAG_IMMUTABLE
or FLAG_MUTABLE
因为Android12。就我而言,我不需要使用PendingIntent.FLAG_MUTABLE
。它的定义如下。
指示创建的 PendingIntent 应该是不可变的标志。
这意味着传递给发送的附加意图参数
填充此意图的未填充属性的方法将是
被忽略。
FLAG_IMMUTABLE 仅限制更改语义的能力
由 send() 调用者通过 send() 发送的意图。的创造者
PendingIntent 始终可以通过以下方式更新 PendingIntent 本身
FLAG_UPDATE_CURRENT。
正如你所看到的,他们说“即使设置了 FLAG_IMMUTABLE,FLAG_UPDATE_CURRENT 仍然有效...”和“PendingIntent 的创建者始终可以通过 FLAG_UPDATE_CURRENT 更新 PendingIntent 本身。”
所以,我想知道的是FLAG_IMMUTABLE
可以完美替代FLAG_UPDATE_CURRENT
在任何 Android 版本中?
例如
PendingIntent.getActivity(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
=> PendingIntent.getActivity(context, requestCode, intent, PendingIntent.FLAG_IMMUTABLE);