http://univasity.iteye.com/blog/1390445
情况是这样的,使用NotificationManager触发多个Notification:
- privateNotificationgenreNotification(Contextcontext,inticon,StringtickerText,Stringtitle,Stringcontent,Intentintent){
- Notificationnotification=newNotification(icon,tickerText,System.currentTimeMillis());
- PendingIntentpendIntent=PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
- notification.setLatestEventInfo(context,title,content,pendIntent);
- notification.flags|=Notification.FLAG_AUTO_CANCEL;
- returnnotification;
- }
- ...
- mNotificationManager.notify(ID_1,
- genreNotification(mContext,ICON_RES,
- notifyText1,notifyTitle1,notifyText1,intent_1));
- ...
- mNotificationManager.notify(ID_2,
- genreNotification(mContext,ICON_RES,
- notifyText2,notifyTitle2,notifyText2,intent_2));
- ...
- mNotificationManager.notify(ID_3,
- genreNotification(mContext,ICON_RES,
- notifyText3,notifyTitle3,notifyText3,intent_3));
可见ID和Intent都是不同的,生成的PendingIntent分别对应着不同的Intent。但是,你会发觉无论点哪个Notification,传递回来的都是最后被notify的Intent。这里即intent_3。
找了很久,试了改变PendingIntent的flag也无果,最后还是在这帖子里找到答案(优快云帖子),我来总结下:
问题主要出在PendingIntent.getActivity();的第二个参数,API文档里虽然说是未被使用的参数(给出的例子也直接写0的),实际上是通过该参数来区别不同的Intent的,如果id相同,就会覆盖掉之前的Intent了。所以总是获取到最后一个Intent。
只要每个不同的Intent对应传递一个独立的ID就可以了,以上函数修改如下(增加ID参数):
- privateNotificationgenreNotification(Contextcontext,inticon,StringtickerText,Stringtitle,Stringcontent,Intentintent,intid){
- Notificationnotification=newNotification(icon,tickerText,System.currentTimeMillis());
- //问题就在这里的id了
- PendingIntentpendIntent=PendingIntent.getActivity(context,id,intent,PendingIntent.FLAG_UPDATE_CURRENT);
- notification.setLatestEventInfo(context,title,content,pendIntent);
- notification.flags|=Notification.FLAG_AUTO_CANCEL;
- returnnotification;
- }
- ...
- mNotificationManager.notify(ID_1,
- genreNotification(mContext,ICON_RES,
- notifyText1,notifyTitle1,notifyText1,intent_1,ID_1));
- ...
- mNotificationManager.notify(ID_2,
- genreNotification(mContext,ICON_RES,
- notifyText2,notifyTitle2,notifyText2,intent_2,ID_2));
- ...
- mNotificationManager.notify(ID_3,
- genreNotification(mContext,ICON_RES,
- notifyText3,notifyTitle3,notifyText3,intent_3,ID_3));