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

移动开发 Android
最近使用android的通知遇到一些坑,都是以前不知道的问题。先贴一段代码,目的是通知告诉用户周围发现一些东西,然后用户点开显示一个列表。很快写完代码,测试了下ok。然后就发布了版本,但是用户一直说每次点开的列表都是同一个,让我很费解,一直以为不是自己的问题,最后自己试了试,好尴尬。

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

[[236632]]

先贴一段代码

/** 
 *  创建通知栏管理工具 
 */ 
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); 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

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

如何解决的

问题在于这一句

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

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

* @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}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

一共有四个FLAG_ONE_SHOT 、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT、FLAG_UPDATE_CURRENT

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

问题二

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

责任编辑:未丽燕 来源: Android开发中文站
相关推荐

2013-05-13 10:03:04

git

2020-07-06 07:48:16

MySQL细节SQL

2014-11-14 15:34:11

2018-07-10 11:05:18

开发者技能命令

2018-07-10 10:45:00

规范Commit项目

2017-11-02 21:02:11

数据库数据库的管理字段长度

2019-07-01 09:10:00

前端开发技术

2015-08-24 11:26:35

LinuxWindows

2017-12-11 10:23:58

数据错误收集

2020-03-09 10:10:02

AI 数据人工智能

2015-07-09 10:36:40

iOS

2017-07-14 09:29:45

AndroidWebview

2023-09-27 22:14:10

GIT 命令开发

2014-02-18 10:59:52

nftablesLinux 3.13

2014-04-30 15:44:11

2017-11-23 11:56:00

2011-12-12 10:24:50

设计

2017-11-21 10:15:00

2021-04-20 10:31:29

WhatsAppAndroid恶意软件

2015-04-22 09:50:56

程序员
点赞
收藏

51CTO技术栈公众号