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而言,相比原来的在线编辑器,还是方便太多了,所改即所见,这个赞!相关文章推荐
- Android 使用Intent传递数据的实现思路与代码
- Android组件间通信--深入理解Intent与IntentFilter
- 详解Activity之singletast启动模式及如何使用intent传值
- android教程之intent的action属性使用示例(intent发短信)
- Android编程开发之打开文件的Intent及使用方法
- Android Intent启动别的应用实现方法
- 深入学习Android中的Intent
- Android学习之Intent中显示意图和隐式意图的用法实例分析
- 从Android源码剖析Intent查询匹配的实现
- Android 广播大全 Intent Action 事件详解
- Android解析Intent Filter的方法
- Android之Intent附加数据的两种实现方法
- 不同Activity之间的数据传递--Bundle对象的实现
- Andriod Intent的详细解释深入 Android 【四】 —— 组件调用
- Android Intent应用实践经验总结
- Intent机制详解
- Intent用法示例
- android笔记--Intent和IntentFilter详解
- android intent和intent action大全
- Android隐式意图Intent