使用FLAG_IMMUTABLE:如果你希望 PendingIntent 在创建后无法被取消或更新,可以使用 FLAG_IMMUTABLE 标志。这将提高应用程序的性能并防止意外的修改。 Intent intent = new Intent(context, MyReceiver.class); PendingIntent.getActivity(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_...
所以这里可以更新我们在上面创建的// PendingIntentvalupdatedPendingIntent=PendingIntent.getActivity(applicationContext,NOTIFICATION_REQUEST_CODE,updatedIntent,PendingIntent.FLAG_IMMUTABLEorPendingIntent.FLAG_UPDATE_CURRENT)// 该 PendingIntent
您可以使用 FLAG_EXPIRE_IMMEDIATELY 标志将 PendingIntent 设置为立即过期,或者使用 setExpirationTime() 方法设置一个过期时间。 Intent intent = new Intent(context, MyReceiver.class); PendingIntent.getActivity(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); long ...
但按书中描述:“getActivity第四个参数用于确定PendingIntent的行为,有 FLAG_ONE_SHOT、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT和 FLAG_UPDATE_CURRENT这4种值可选,通常情况下这个参数传入0就可以了。” 经通过查看api文档与日志信息,发现原因在于android api 31版本之后,创建PendingIntent的时候要通过FLAG_IMMUTABLE或FLAG_...
然后,我们使用PendingIntent.getActivity()方法创建了一个PendingIntent,并传递了FLAG_IMMUTABLE标志来指定其不可变性。最后,我们将这个PendingIntent设置为通知的点击意图,并显示通知。当用户点击通知时,系统将启动MainActivity,但由于PendingIntent是不可变的,因此其内部Intent的语义在触发时不会被修改。
getActivity(applicationContext, NOTIFICATION_REQUEST_CODE, anotherIntent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) 注意事项 2 - 显式指定可变性: FLAG_MUTABLE 可变标记位是 Android 12 新增的,在 Android 12 之前,未使用 FLAG_IMMUTABLE 不可变标记位的 PendingIntent 都默认是可变的。
}// 由于我们使用了 FLAG_UPDATE_CURRENT 标记,所以这里可以更新我们在上面创建的// PendingIntentvalupdatedPendingIntent = PendingIntent.getActivity( applicationContext, NOTIFICATION_REQUEST_CODE, updatedIntent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT ...
PendingIntent 可变性是一种对外部应用消费行为的约束机制,通过标记位 FLAG_MUTABLE 和FLAG_IMMUTABLE 控制PendingIntent 可变或不可变。例如: 示例程序 // 创建可变 PendingIntentval pendingIntent = PendingIntent.getActivity(applicationContext, NOTIFICATION_REQUEST_CODE, intent, PendingIntent.FLAG_MUTABLE)// 创建不可变...
// 由于我们使用了 FLAG_UPDATE_CURRENT 标记,所以这里可以更新我们在上面创建的// PendingIntentvalupdatedPendingIntent = PendingIntent.getActivity(applicationContext,NOTIFICATION_REQUEST_CODE,updatedIntent,PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT)// 该 PendingIntent 已被更新 ...
val pendingIntent = PendingIntent.getActivity( applicationContext, 0, packageManager?.getLaunchIntentForPackage(packageName), PendingIntent.FLAG_IMMUTABLE ) Run Code Online (Sandbox Code Playgroud) 所以我不明白为什么它说我需要在我已经使用该标志时使用它?我错过了什么吗? 编辑 Strongly consider using FLAG...