欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android通知的使用你可能会遇到的坑

程序员文章站 2022-07-13 14:33:01
...

最近使用android的通知遇到一些坑,都是以前不知道的问题。
先贴一段代码

/**
 *  创建通知栏管理工具
 */
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService
        (Context.NOTIFICATION_SERVICE);

notificationManager.cancel(105);

Intent equipListPage = new Intent(mContext, CommonActivity.class);
equipListPage.putExtra("fragmentName", EquipListFragment.class.getName());
equipListPage.putExtra("json", JSON.toJSONString(list));
PendingIntent pi = PendingIntent.getActivity(mContext, 0, equipListPage, null);

/**
 *  实例化通知栏构造器
 */
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mContext);
Notification notification = mBuilder
        .setAutoCancel(true)
        .setContentTitle("test")
        .setContentText("在你的周围发现 " + list.size() + " 个设备")
        .setContentIntent(pi)
        .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.max_ic_launcher))
        .setSmallIcon(R.drawable.max_ic_launcher)
        .setWhen(System.currentTimeMillis())
        .setDefaults(Notification.DEFAULT_SOUND)
        .setPriority(NotificationCompat.PRIORITY_MAX)
        .build();
notifyId = (int) System.currentTimeMillis();
notificationManager.notify(105, notification);

目的是通知告诉用户周围发现一些东西,然后用户点开显示一个列表。很快写完代码,测试了下ok。然后就发布了版本,但是用户一直说每次点开的列表都是同一个,让我很费解,一直以为不是自己的问题,最后自己试了试,好尴尬。果然有问题,就是传递的数据没有被更新。

如何解决的

问题在于这一句

PendingIntent.getActivity(mContext, 0, equipListPage, null);

一共有四个参数,看看源码的解释

* @param context The Context in which this PendingIntent should start
* the activity.
* @param requestCode Private request code for the sender
* @param intent Intent of the activity to be launched.
* @param flags May be {@link #FLAG_ONE_SHOT}, {@link #FLAG_NO_CREATE},
* {@link #FLAG_CANCEL_CURRENT}, {@link #FLAG_UPDATE_CURRENT},

一共有四个FLAG_ONE_SHOTFLAG_NO_CREATEFLAG_CANCEL_CURRENTFLAG_UPDATE_CURRENT
我使用的是FLAG_UPDATE_CURRENT解决了问题,它主要是用来更新消息,比如你发送了一个通知消息,传递“123” ,在点击前有发送了一个通知消息,推送的是“345”,此时你点击两条消息,都是得到的“345”。 所以我的问题自然就解决了。

问题二

后面又来了一个需求,需要增加一个通知消息,展示不一样的应用。 也就是上面的消息,通知1 需要得到“123”,通知2需要得到“456” 。 这该怎么办呢,这就需要用到第二个flag了 。当使用FLAG_CANCEL_CURRENT时,依然是上面的操作步骤,这时候会发现,点击消息1时,没反应,第二条可以点击。原因在于第二个参数,你需要每个不同的消息,定义不同的requestCode ,问题就能够得到解决。

相关标签: Notification