`
univasity
  • 浏览: 809666 次
  • 性别: 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 的使用 Notification 是 Android 系统中的一种机制,用于在系统状态栏中显示通知信息,通常用于提醒用户某些事件的发生。PendingIntent 则是 Android 中的一种机制,用于在特定的...

    安卓之 (解决问题)PendingIntent和Intent的区别1

    在Android开发中,Intent和PendingIntent是两个非常重要的概念,它们在组件间的通信中起到关键作用。Intent可以理解为一种消息传递对象,用于在不同组件之间传递行为和数据,而PendingIntent则是Intent的一种封装,...

    PendingIntent 使用示例

    当其他组件(如Notification或BroadcastReceiver)通过PendingIntent触发这个Intent时,系统会确保只有授权的组件才能执行相应的操作。 在Notification中使用PendingIntent,通常是为了在用户点击通知时启动一个...

    Android中pendingIntent与Intent的深入分析

    在创建Notification时,会通过`setLatestEventInfo()`方法设置一个PendingIntent,这样用户点击通知时,系统就会执行这个PendingIntent所关联的Intent。 总的来说,Intent是即时执行的操作,而PendingIntent是延迟...

    Android 之 PendingIntent用法介绍

    例如,当我们更新Notification的Intent时,如果使用了`FLAG_UPDATE_CURRENT`,那么先前的PendingIntent会被更新为新的Intent。 在实际应用中,PendingIntent常用于: 1. **通知的点击事件**:创建一个PendingIntent...

    android 服务 Service PendingIntent 通知

    `PendingIntent`主要用于跨进程通信,例如在通知(Notification)中使用,当用户点击通知时,可以通过`PendingIntent`启动一个Activity或Service。 通知(Notification)是Android系统向用户展示应用在后台运行状态...

    Notification最新用法、实现Notification的通知栏常驻、Notification的big View、解决Notification点击无效

    - 另一个常见方法是使用Foreground Service,它会显示一个持续的Notification,即使应用在后台运行也不会被系统杀死。 3. **Notification的big View样式** - big View是Android引入的一种扩展通知,可以展示更多...

    PendingIntent

    PendingIntent的工作原理是它会持有一个意图(Intent)的引用,并且当这个PendingIntent被触发时,系统会根据Intent的内容执行相应的操作。这种设计模式为应用提供了一种安全的方式来与其他组件交互,因为只有拥有...

    Android实现Notification的通知栏常驻.zip

    3. **PendingIntent**: Notification通常包含一个或多个`PendingIntent`,它们在用户点击通知时触发。`PendingIntent`可以启动一个Activity、Service或者BroadcastReceiver。 4. **NotificationManager**: 使用系统...

    Notification

    在Android开发中,`Notification`是系统提供的一种通知机制,用于在状态栏向用户显示重要的信息或提醒。本文将深入探讨`Notification`的实现,并结合自定义`Dialog`消息展示来增强用户体验。 首先,`Notification`...

    Android NOtification 使用

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0); notification.setLatestEventInfo(this, "标题", "内容", contentIntent); notification.flags |= Notification.FLAG_AUTO_...

    Notification的使用示例各种效果

    在构建`Notification`时,我们需要使用`NotificationCompat.Builder`类,它是Android Support Library提供的兼容版本,能确保在多个Android版本上运行。 1. **创建基本Notification** 使用`NotificationCompat....

    Android新手之简单实现Notification

    在Android开发中,Notification是一种非常重要的用户界面组件,它能够在状态栏中显示消息,即使应用在后台运行或者被关闭,用户也能接收到相关信息。对于新手来说,理解并正确使用Notification是提升用户体验的关键...

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

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

    notification实现

    4. **扩展视图(Big View)**:当用户下拉状态栏时显示的详细信息。 5. **操作(Actions)**:可点击的按钮,为用户提供快速响应的选项。 在Android中,`Notification`的创建通常涉及以下步骤: 1. **创建`...

    实现Notification的通知栏常驻

    4. **扩展视图(big view)**:在通知被展开时显示更详细的信息。 5. **意图(Intent)**:当用户点击通知时,系统会启动对应的Activity或服务。 实现常驻Notification的关键在于设置其`NotificationCompat.Builder...

    notification问题

    "notification问题"通常涉及到如何正确、有效地使用Android的通知机制,以及在实际开发中可能遇到的问题和解决策略。 1. **Notification的创建**:首先,创建一个Notification需要NotificationCompat.Builder对象,...

    android Notification使用大全

    在Android系统中,Notification是应用与用户交互的重要方式,它可以在状态栏中显示信息,即使用户不在使用应用时也能提醒用户有新的事件发生。本文将深入探讨如何在Android中使用Notification,包括基本用法、自定义...

    Android 一次启动多个Activity (TaskStackBuilder)

    "Android一次启动多个Activity (TaskStackBuilder)"这个话题涉及到Android的Task和Back Stack管理,以及如何利用TaskStackBuilder实现从通知启动多级Activity并保持正确的返回流程。下面将详细阐述这一知识点。 ...

Global site tag (gtag.js) - Google Analytics