情况是这样的,使用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));
分享到:
相关推荐
Notification 和 PendingIntent 的使用 Notification 是 Android 系统中的一种机制,用于在系统状态栏中显示通知信息,通常用于提醒用户某些事件的发生。PendingIntent 则是 Android 中的一种机制,用于在特定的...
在Android开发中,Intent和PendingIntent是两个非常重要的概念,它们在组件间的通信中起到关键作用。Intent可以理解为一种消息传递对象,用于在不同组件之间传递行为和数据,而PendingIntent则是Intent的一种封装,...
当其他组件(如Notification或BroadcastReceiver)通过PendingIntent触发这个Intent时,系统会确保只有授权的组件才能执行相应的操作。 在Notification中使用PendingIntent,通常是为了在用户点击通知时启动一个...
在创建Notification时,会通过`setLatestEventInfo()`方法设置一个PendingIntent,这样用户点击通知时,系统就会执行这个PendingIntent所关联的Intent。 总的来说,Intent是即时执行的操作,而PendingIntent是延迟...
例如,当我们更新Notification的Intent时,如果使用了`FLAG_UPDATE_CURRENT`,那么先前的PendingIntent会被更新为新的Intent。 在实际应用中,PendingIntent常用于: 1. **通知的点击事件**:创建一个PendingIntent...
`PendingIntent`主要用于跨进程通信,例如在通知(Notification)中使用,当用户点击通知时,可以通过`PendingIntent`启动一个Activity或Service。 通知(Notification)是Android系统向用户展示应用在后台运行状态...
- 另一个常见方法是使用Foreground Service,它会显示一个持续的Notification,即使应用在后台运行也不会被系统杀死。 3. **Notification的big View样式** - big View是Android引入的一种扩展通知,可以展示更多...
PendingIntent的工作原理是它会持有一个意图(Intent)的引用,并且当这个PendingIntent被触发时,系统会根据Intent的内容执行相应的操作。这种设计模式为应用提供了一种安全的方式来与其他组件交互,因为只有拥有...
3. **PendingIntent**: Notification通常包含一个或多个`PendingIntent`,它们在用户点击通知时触发。`PendingIntent`可以启动一个Activity、Service或者BroadcastReceiver。 4. **NotificationManager**: 使用系统...
在Android开发中,`Notification`是系统提供的一种通知机制,用于在状态栏向用户显示重要的信息或提醒。本文将深入探讨`Notification`的实现,并结合自定义`Dialog`消息展示来增强用户体验。 首先,`Notification`...
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0); notification.setLatestEventInfo(this, "标题", "内容", contentIntent); notification.flags |= Notification.FLAG_AUTO_...
在构建`Notification`时,我们需要使用`NotificationCompat.Builder`类,它是Android Support Library提供的兼容版本,能确保在多个Android版本上运行。 1. **创建基本Notification** 使用`NotificationCompat....
在Android开发中,Notification是一种非常重要的用户界面组件,它能够在状态栏中显示消息,即使应用在后台运行或者被关闭,用户也能接收到相关信息。对于新手来说,理解并正确使用Notification是提升用户体验的关键...
这个例子演示Android 在状态栏添加Notification信息图标及提示,相信大家对这个功能已经不陌生了,手机中安装的APP,一般都会在后台运行,时不时会在手机顶部的状态栏中显示应用的图标,滑出状态栏会看到详细的信息...
4. **扩展视图(Big View)**:当用户下拉状态栏时显示的详细信息。 5. **操作(Actions)**:可点击的按钮,为用户提供快速响应的选项。 在Android中,`Notification`的创建通常涉及以下步骤: 1. **创建`...
4. **扩展视图(big view)**:在通知被展开时显示更详细的信息。 5. **意图(Intent)**:当用户点击通知时,系统会启动对应的Activity或服务。 实现常驻Notification的关键在于设置其`NotificationCompat.Builder...
"notification问题"通常涉及到如何正确、有效地使用Android的通知机制,以及在实际开发中可能遇到的问题和解决策略。 1. **Notification的创建**:首先,创建一个Notification需要NotificationCompat.Builder对象,...
在Android系统中,Notification是应用与用户交互的重要方式,它可以在状态栏中显示信息,即使用户不在使用应用时也能提醒用户有新的事件发生。本文将深入探讨如何在Android中使用Notification,包括基本用法、自定义...
"Android一次启动多个Activity (TaskStackBuilder)"这个话题涉及到Android的Task和Back Stack管理,以及如何利用TaskStackBuilder实现从通知启动多级Activity并保持正确的返回流程。下面将详细阐述这一知识点。 ...