[问题解决]同时显示多个Notification时PendingIntent的Intent被覆盖?

情况是这样的,使用NotificationManager触发多个Notification:

Java代码 复制代码 收藏代码
  1. private Notification genreNotification(Context context, int icon, String tickerText, String title, String content, Intent intent){   
  2.         Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());   
  3.         PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);   
  4.         notification.setLatestEventInfo(context, title, content, pendIntent);   
  5.         notification.flags |= Notification.FLAG_AUTO_CANCEL;   
  6.         return notification;   
  7.     }   
  8.   
  9. ...   
  10. mNotificationManager.notify(ID_1,    
  11.                     genreNotification(mContext, ICON_RES,    
  12.                             notifyText1, notifyTitle1, notifyText1, intent_1));   
  13. ...   
  14. mNotificationManager.notify(ID_2,    
  15.                     genreNotification(mContext, ICON_RES,    
  16.                             notifyText2, notifyTitle2, notifyText2, intent_2));   
  17.   
  18. ...   
  19. mNotificationManager.notify(ID_3,    
  20.                     genreNotification(mContext, ICON_RES,    
  21.                             notifyText3, notifyTitle3, notifyText3, intent_3));  
private Notification genreNotification(Context context, int icon, String tickerText, String title, String content, Intent intent){Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);notification.setLatestEventInfo(context, title, content, pendIntent);notification.flags |= Notification.FLAG_AUTO_CANCEL;return notification;}...
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也无果,最后还是在这帖子里找到答案(CSDN帖子 ),我来总结下:

问题主要出在PendingIntent.getActivity();的第二个参数,API文档里虽然说是未被使用的参数(给出的例子也直接写0的),实际上是通过该参数来区别不同的Intent的,如果id相同,就会覆盖掉之前的Intent了。所以总是获取到最后一个Intent。

 

只要每个不同的Intent对应传递一个独立的ID就可以了,以上函数修改如下(增加ID参数):

Java代码 复制代码 收藏代码
  1. private Notification genreNotification(Context context, int icon, String tickerText, String title, String content, Intent intent, int id){   
  2.         Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());   
  3.         // 问题就在这里的id了   
  4.         PendingIntent pendIntent = PendingIntent.getActivity(context, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);   
  5.         notification.setLatestEventInfo(context, title, content, pendIntent);   
  6.         notification.flags |= Notification.FLAG_AUTO_CANCEL;   
  7.         return notification;   
  8.     }   
  9.   
  10. ...   
  11. mNotificationManager.notify(ID_1,    
  12.                     genreNotification(mContext, ICON_RES,    
  13.                             notifyText1, notifyTitle1, notifyText1, intent_1, ID_1));   
  14. ...   
  15. mNotificationManager.notify(ID_2,    
  16.                     genreNotification(mContext, ICON_RES,    
  17.                             notifyText2, notifyTitle2, notifyText2, intent_2, ID_2));   
  18.   
  19. ...   
  20. mNotificationManager.notify(ID_3,    
  21.                     genreNotification(mContext, ICON_RES,    
  22.                             notifyText3, notifyTitle3, notifyText3, intent_3, ID_3));  

转载于:https://www.cnblogs.com/wangluochong/p/4189716.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【工业革命】第四次工业革命:自主经济的崛起

来源:产业智能官摘要:数据是新的资源,数据的处理和应用将带动第四次工业革命。随着大数据、云计算、物联网、人工智能、区块链等技术的崛起,很多人都说第四次工业革命即将到来。第四次工业革命到底指的是什么?应该如何…

2019年大数据发展将走向何方

来源:网络大数据近日,包括CCF(中国计算机学会)大数据专家委员会、IDC公司(Internet Data Center 互联网数据中心)和Gartner公司等多家国内外知名信息技术研究机构均发布报告,对2019年乃至未来若干年的大数据产业发展趋势做出预测,…

AI人必看!89页全网最全清华知识图谱报告

来源:智东西摘要:谷歌冲锋,淘宝猛追,这个AI秘密武器强在哪?知识图谱(Knowledge Graph)是人工智能的重要分支技术,它在2012年由谷歌提出,成为建立大规模知识的杀手锏应用&…

人机融合智能的现状与展望

来源:人机与认知实验室作者:刘伟 苌凯旋摘要:本文对人机融合智能的概念、应用、发展将面临的关键问题以及未来发展的方向进行简要介绍。1 引言1.1 现有人工智能的不足与挑战人工智能(AI)的概念于1956年的达特蒙斯学院暑…

Unity自带网络功能——NetworkView组件、Serialize、RPC

Unity拥有大量的第三方插件,专门提供了对网络功能的支持。可是,大部分开发人员第一次接触到的还是Unity自带的网络功能,也就是大家常常说到的Unity Networking API。这些API是借助于组件NetworkView发挥作用的,而它能够简化开发人…

Science:人工智能的发展离不开神经科学,先天结构或是下一个方向

来源:Science编译:机器之心摘要:人工智能从神经科学领域吸收了大量养分,并由此催生了深度学习和强化学习等智能处理方法。以色列魏茨曼科学研究学院计算机科学系教授 Shimon Ullman 相信神经科学还能为人工智能发展提供进一步的助…

Ubuntu20.04 及深度学习环境anaconda、cuda、cudnn、pytorch、paddle2.3安装记录

学习目标: Ubuntu20.04下装好torch、paddle深度学习环境。 选择的版本环境是 :最新的nvidia驱动、cuda 11.1 、cudnn v8.1.1,下面会说为啥这么选。 学习内容: 1. Ubuntu20.04仓库换源 本节参考Ubuntu 20.04 Linux更换源教程 2…

NSIS脚本语言安装与编译

NSIS是什么 当项目中需要把安装包发给客户时,不能直接发送release文件,需要把release文件压缩打包,这时就可以用到NSIS工具,NSIS工具可以进行包装,使用时需要下载: 编译环境:nullsoft scriptab…

AI 的寒冬将来临

来源:云头条深度学习处于所谓的AI革命的前沿至今已有好几年;许多人过去认为,深度学习是神奇的“银弹”,会把我们带到技术奇点(general AI)的奇妙世界。许多公司在2014年、2015年和2016年纷纷下豪赌&#xf…

Libcurl安装与HelloWorld

Windows系统下源代码下载编译、安装方式如下: https://blog.csdn.net/fxbjye/article/details/89152849 编译后得到库文件,把这两个文件复制到项目文件中, 修改项目文件的属性, 修改附加依赖项: 输入代码&#xff1…

信息论之父是如何将世界数字化的?

来源:CSDN编译:弯月机械鼠闯迷宫在 20 世纪 50 年代早期的一段视频中,贝尔实验室的科学家克劳德香农(Claude Shannon)展示了他的一项新发明:一只名为 Theseus 的机械鼠(看起来需要上发条&#x…

奇点、技术失控与技术启示录

来源:资本实验室回顾过去,我们可以看到历史上各个时期涌现出的众多超越时代的新公司、新产品、新思维和新模式。尽管绝大多数创新产品最终都失败了,但先行者们致力于要解决所在时代各种问题和困难的精神,却影响着下一代的技术进步…

Gartner预测2019年十大「数据和分析技术」趋势:增强型分析成为重要卖点

来源:机器之能摘要:处于数据和分析位置的领导人必须审视这些趋势对业务带来的潜在影响,并相应调整业务模式和运营,否则就有可能失去竞争优势。增强型数据分析,增强型数据管理,持续型智能,可解释…

万字长文带你看尽深度学习中的各种卷积网络

来源:AI科技评论摘要:深度学习中的各种卷积网络大家知多少?深度学习中的各种卷积网络大家知多少?对于那些听说过却又对它们没有特别清晰的认识的小伙伴们,这篇文章非常值得一读。Kunlun Bai 是一位人工智能、机器学习、…

Nexus搭建Maven服务器

参考:http://blog.csdn.net/ichsonx/article/details/14642897 1、 为什么使用Nexus 如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓…

通信测试:5G 时代的“卖水人”

来源:中泰证券摘要:“金矿”变成了5G,卖水人的故事已拉开帷幕。前言十八世纪末期,在美国的西进运动中,人们在萨克拉门托河里发现了金砂,工人、农民、海员和传教士,前仆后继前来淘金,…

2019数字化趋势:未来5年政府、零售数字化程度将达80%

来源:阿里云摘要:2月20日,阿里云研究中心发布《2019数字化趋势报告》。报告指出,当前数字化的应用领域正从互联网行业向政府、金融、零售、农业、工业、交通、物流、医疗健康等行业深入。其中,政府、零售业等将成为受云…

量子计算何时具有真正的商业价值?

来源:IEEE电气电子工程师学会我们对新技术的迷恋似乎总是遵循着同样的轨迹:我们时而着迷,时而崇拜,时而失望,时而沮丧,最终得到的满足比我们最初想象的要少。1954年,德州仪器公司宣称其新型晶体…

[转帖]FPGA--Vivado

来源:http://home.eeworld.com.cn/my/space-uid-639749-blogid-267593.html 一般的,在Verilog中最常用的编码方式有二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码。二进制码和格雷码是压缩状态编码。 若使用格雷编码,则相…

国内5G工程建设面临的6大挑战

来源:5G产业圈摘要:2019年被很多人认为是5G建设元年,但是,5G建设要面临的这些难题,你清楚几个?1、网络云化带来的规划和运维挑战5G网络全面云化,在带来功能灵活性的同时,也带来很多技…