您的位置:首页 > 其它

PendingIntent不同Intent数据的覆盖问题

2015-12-15 17:09 330 查看

PendingIntent不同Intent数据的覆盖问题

问题

  在为一个APP添加下载的功能,由于同时可能有多个下载任务,所以,在通知栏会有多个通知,在点击这些通知时,需要弹出“是否取消下载”的对话框。举个例子,按顺序点击A、B两个下载任务,依次会有TA和TB两个通知。问题是每次点击TA,弹出的都是TB的对话框,似乎是A所对应的Intent数据被B覆盖了,问题出现了好几天,试了各种办法,真相真是令人大跌眼镜。

初步解决办法:

  标准解法:
先说结论:

PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags)的四个参数中,通过requestCode来区分不同Intent数据是完全有效可用的,flags用PendingIntent.FLAG_UPDATE_CURRENT,各个flag的含义如下:

FLAG_ONE_SHOT:得到的pi只能使用一次,第二次使用该pi时报错

FLAG_NO_CREATE: 当pi不存在时,不创建,返回null

FLAG_CANCEL_CURRENT: 每次都创建一个新的pi

FLAG_UPDATE_CURRENT: 不存在时就创建,创建好了以后就一直用它,每次使用时都会更新pi的数据(使用较多)

  现象:
我确实这样做了,并不管用,点击TA依然弹出TB。之前一直在纠结上面说的PendingIntent办法是不是没用了。今天我就要准备找个Android大神问下了,突然脑袋搭错线了,去看了下其他部分的代码!!就在这个时候,我好像发现了个小问题。

A和B在下载的时候,通知上会有各自的进度条,因此TA,TB就会有更新的时候,这时,为了方便,我设了一个全局的notification变量来保存创建通知时的notification,A B 公用,每次修改进度条,也只是修改notification中的相关数据后,通过notify_Id来区分,如下:

mNotificationManager.notify(notify_id, notification);


  嗯,问题就在这儿。notification本来是绑定了一个PendingIntent的,比如最近添加的是任务B,则notification绑定的PendingIntent就是B对应的Intent,若这之后再通过上面的那句代码修改通知A的通知TA,则相当于用TB对应的notification替代了原来TA的notification,绑定的PendingIntent事件自然也变为了TA的。

最后解决办法:

找到问题后修改就很容易了,用两个全局变量来分别保存A、B对应的notification,然后下载进度修改时,也不能仅通过notify_Id来区分,notification也要换成notification_A或notification_B就行了。



写在最后

  是不是很蠢?我也觉得。。还蠢了好几天。所以看问题不能拘泥于一点,不能拘泥于一个角度。此路不通不一定是路选错了,也可能是方向问题。最后的最后,初次使用markdown编辑器,感觉一般般,当然,这是相比office word而言,相比原来的在线编辑器,还是方便太多了,所改即所见,这个赞!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Intent PendingInt