hizhangyuping的博客

选择比努力更重要

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为不同的值,就行了,在高手眼中可能很简单,但是对于新手来说,却是很头疼的坑。
现在重新运行程序,你会发现达到了我们的预期效果
这里写图片描述

源码下载:

http://download.csdn.net/download/waa_0618/9740491

        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
            </div>
阅读更多
文章标签: 通知的PendingIntent
个人分类: Android
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Android 通知栏 PendingIntent.getActivity(context, requestCode, intent, flags)的第二个参数requestCode不能写一样

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭