admin 管理员组文章数量: 887021
Android 通知栏 PendingIntent.getActivity(context, requestCode, intent, flags)的第二个参数requestCode不能写一样
写这个博客的原因是,我曾在项目中被Android通知栏坑了好久。由于个人能力的原因,以及其他原因,一直拖了好久,才解决。
不知道大家有没有遇到过这种问题:
通过下面的方法创建三个通知:
public void notify(String desc) {Intent perIntent = new Intent(context, TestActivity.class);perIntent.putExtra("desc", desc);PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, perIntent,PendingIntent.FLAG_UPDATE_CURRENT);// 创建一个通知Notification.Builder builder = new Notification.Builder(context);builder.setSmallIcon(R.drawable.ic_launcher)//.setContentText(desc)//.setContentTitle(desc)//.setTicker(desc)//.setContentIntent(pendingIntent)//.setShowWhen(false);//Notification notification = null;notification = builder.build();notification.flags |= Notification.FLAG_AUTO_CANCEL;nManager.notify(notifyId++, notification);// id是应用中通知的唯一标识}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
通知如图所示:
当我分别点击这三个通知,效果如下所示:
大家看出来问题了吧,点击进去之后,在TestActivity类里面,通过下面的方法获取到的值都是一样的,而且都是:通知3,
descText.setText(getIntent().getStringExtra("desc"));
- 1
这个问题是怎么产生的呢?原因是:PendingIntent.getActivity(context, 0, perIntent,
PendingIntent.FLAG_UPDATE_CURRENT);这句话的第二个参数 requestCode,我设置的值:0,由于我创建的三个通知,requestCode值相同,并且第四个参数PendingIntent.FLAG_UPDATE_CURRENT,导致后创建的通知会更新之前的通知的perIntent参数,因此每次点击通知后,获取到的参数永远是最后的那个。
解决方法:PendingIntent.getActivity(context, requestCode, perIntent,
PendingIntent.FLAG_UPDATE_CURRENT);,设置requestCode为不同的值,就行了,在高手眼中可能很简单,但是对于新手来说,却是很头疼的坑。
现在重新运行程序,你会发现达到了我们的预期效果
源码下载:
<link rel="stylesheet" href=".css"></div>
本文标签:
版权声明:本文标题:Android 通知栏 PendingIntent.getActivity(context, requestCode, intent, flags)的第二个参数requestCode不能写一样 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1731152829h1453559.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论