关于多个Notification时,之前的PendingIntent设置无效的解决方案
我们在使用android的通知栏(Notification)时,需要新建一个PendingIntent对象用于处理点击该通知之后的事件。
PendingIntent需要传入一个Intent对象,用于打开Activity、Broadcast或是Service。
PendingIntent.getActivity可以将intent对象与notification对象关联起来,示例如下:
1 | Intent intent = new Intent(context, Activity.class); |
这样的话,点击notification时,就会启动相应的activity,并通过Intent将相应的参数传递过去。
之前的写法是这样的:
1 | notification.contentIntent = PendingIntent.getBroadcast(appContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); |
当我在发送两条以上的notification时,最新发送的notification点击后可以正常跳转Activity,但是之前发送的点击之后都没有反应。我一直以为是flags参数的问题,就把PendingIntent.FLAG_CANCEL_CURRENT
(表示有变动时更新Intent里Extras的值)改成了PendingIntent.FLAG_UPDATE_CURRENT
(表示清除前面的Intent重新new一个),发现问题依然没有解决。
然后我去看了下源码里面对getActivity(context, requestCode, intent, flags)
方法参数的注释:
1 | context |
context
intent
这两个参数就不用解释了,刚才试过了,跟flags
的值也没有关系,那就只剩下requestCode
这个值了,看了下PendingIntent的相关源码:
1 | public static PendingIntent getActivity(Context context, int requestCode, @NonNull Intent intent, @Flags int flags, @Nullable Bundle options) { |
可以注意到,在调用getActivity方法时,源码里将requestCode
这个值传入到新的IIententSender
对象里面了,猜测应该是sender用requestCode
来区分不同的PendingIntent
对象,在看之前有问题的代码,所有的requestCode
的值都为0,因此将这个值改为每条信息都不一样的值,问题就解决了。