`
univasity
  • 浏览: 800651 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多

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

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参数):

private Notification genreNotification(Context context, int icon, String tickerText, String title, String content, Intent intent, int id){
        Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
        // 问题就在这里的id了
        PendingIntent pendIntent = PendingIntent.getActivity(context, id, 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, ID_1));
...
mNotificationManager.notify(ID_2, 
                    genreNotification(mContext, ICON_RES, 
                            notifyText2, notifyTitle2, notifyText2, intent_2, ID_2));

...
mNotificationManager.notify(ID_3, 
                    genreNotification(mContext, ICON_RES, 
                            notifyText3, notifyTitle3, notifyText3, intent_3, ID_3));
3
0
分享到:
评论
5 楼 andh1222 2012-03-21  
,多谢。
这个帖子看过,应该是用透明图标一类实现的效果。
实现了一下,不是特别理想。

也测试了一下主流软件的Notification效果,例如:firefox,dorpBox,evernote等
没有像Gmail那么实现的,估计是Google自己做的特效吧。
4 楼 univasity 2012-03-21  
andh1222 写道

发送Notification的时候,怎么隐藏状态栏上的图标啊。


对于隐藏Notification的ICON,最近看到了这样一篇文章,也许有帮助...回头来试试,发觉Notification还有好多参数没有仔细研究过.
http://stackoverflow.com/questions/2855110/android-no-icon-for-notification
3 楼 andh1222 2012-03-14  
 

我们项目中有这么一个要求。

标题栏上只显示一个计数的ICON
通知领域内要显示每次发送的Notification,并且Notification对应的PendingIntent内容也不相同。

据说客户是看了Gmail的效果提出来的。

真是头疼啊,只能看看有没有方法解析Gmail的源代码了。
2 楼 univasity 2012-03-12  
andh1222 写道
太强悍了,老大,我也是这个问题,搞了好久,差文档也么搞定啊。

多谢你这篇文章了。   

再问一个问题。

发送Notification的时候,怎么隐藏状态栏上的图标啊。

如果发送多个Nofication,显示多个图标,画面非常不友好。



就是通过显示图标来提示用户的吧,没有图标怎么提示呢。应该不能隐藏。

说的多个图标,如果你是同一个提示内容是可以使用PendingIntent.FLAG_UPDATE_CURRENT等属性来控制的。但如果是要提示并绑定不同的Intent,目前确实是一条Notification对应一个独立的ICON的,暂不知有没其他解决方法,mark下研究下。
1 楼 andh1222 2012-03-08  
太强悍了,老大,我也是这个问题,搞了好久,差文档也么搞定啊。

多谢你这篇文章了。   

再问一个问题。

发送Notification的时候,怎么隐藏状态栏上的图标啊。

如果发送多个Nofication,显示多个图标,画面非常不友好。

相关推荐

    Notification的用法和PendingIntent使用

    Notification的用法和PendingIntent的使用

    PendingIntent 使用示例

    PendingIntent 分别实现了Notification和sms短信发送的两个示例

    Android 在状态栏添加Notification信息图标及提示.rar

    这个例子演示Android 在状态栏添加Notification信息图标及提示,相信大家对这个功能已经不陌生了,手机中安装的APP,一般都会在后台运行,时不时会在手机顶部的状态栏中显示应用的图标,滑出状态栏会看到详细的信息...

    Android中AlarmManager+Notification实现定时通知提醒功能

    AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver)。本文将讲解一下如何使用AlarmManager实现定时提醒...

    Android中通知Notification使用实例(振动、灯光、声音)

    本文实例讲解了通知Notification使用方法,此知识点就是用作通知的显示,包括振动、灯光、声音等效果,分享给大家供大家参考,具体内容如下 效果图: MainActivity: import java.io.File; import android....

    NotificationTest1

    根据郭霖第一行代码中Notification和PendingIntent 代码修改后的代码

    Android实现为Notification加上一个进度条的方法

    本文实例讲述了Android实现为Notification加上一个进度条的方法。分享给大家供大家参考,具体如下: package com.notification; import android.app.Activity; import android.app.Notification; import android....

    android中创建通知栏Notification代码实例

    ///// 第一步:获取NotificationManager NotificationManager nm = (NotificationManager) getSystemService... //PendingIntent是待执行的Intent PendingIntent pi = PendingIntent.getActivity(this, 0

    让Android应用不被杀死(killer)的方法

    方法: 对于一个service,可以首先把它设为在前台运行: 代码如下: public void MyService.onCreate() {  super.onCreate();  Notification notification = new Notification(android.... PendingIntent p_intent =

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...

    Google+Android+SDK开发范例大全

    6.13 指定时间置换桌面背景——多AlarmManager事件处理 6.14 判断发送短信后的状态——BroadcastReceiver聆听PendingIntent 6.15 后台服务送出广播信息——sendBroadcast与BroadcastReceiver 6.16 开机程序设计——...

    Google Android SDK开发范例大全的目录

    3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 ...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog...

    Google Android sdk 开发范例大全 部分章节代码

    3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 ...

    Google Android SDK 开发范例大全01

    3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 ...

    Google Android SDK 开发范例大全02

    3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 ...

Global site tag (gtag.js) - Google Analytics