android PendingIntent.getBroadcast 之坑

我在 Notifycation 里设置了一个 BroadcastReceiver 类型的点击回调、


使用 intent 的 action 与 category 来接受点击广播,使用同一个广播接受器接受,再在 intent 里面放一些数据,来进行不同的处理,每次发送通知只是改了intent extra 数据

那么好,我来获取 PendingIntent 

		PendingIntent contentIntent = PendingIntent.getBroadcast(context, 0, 
				showIntent, 
				PendingIntent.FLAG_UPDATE_CURRENT);

当我发出2条ID不同,但是 action 和 category 相同的 notifycation 之后,点击2条通知,广播接收器里面收到的 intent 里面拿出来的数据怎么都是后面发送的那条,

之前百思不得其解,代码上毫无问题

经过重重排查,最后才怀疑 getBroadcast 这里是不是对相同 action 和 category 的intent进行了覆盖处理!


结果还真是这样!


看 PendingIntent.getBroadcast 的第四个参数:

1.PendingIntent.FLAG_UPDATE_CURRENT

Flag for use with getActivity, getBroadcast, and getService: if the described PendingIntent already exists, then keep it but its replace its extra data with what is in this new Intent. This can be used if you are creating intents where only the extras change, and don't care that any entities that received your previous PendingIntent will be able to launch it with your new extras even if they are not explicitly given to it.

这个的意思就是只更新 intent 的 extra 如果你创建的intent只有 extra 变了,好,我就跳到这个坑里去了!


我后来使用了 传不同的 action 来解决这个问题



你可能感兴趣的:(Android开发笔记)