项目开发中遇到以下问题,需要在一个Activity中显示不同的消息类型,消息通过notification触发,代码如下:
Intent intent = new Intent(context,
NotificationDetailsActivity.class);
intent.putExtra(PNConstants.NOTIFICATION_ID, notificationId);
intent.putExtra(PNConstants.NOTIFICATION_TITLE, title);
intent.putExtra(PNConstants.NOTIFICATION_MESSAGE, message);
intent.putExtra(PNConstants.NOTIFICATION_LOGIN_URI, loginUri);
intent.putExtra(PNConstants.NOTIFICATION_URI, uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(context, title, message,
contentIntent);
notificationManager.notify(notificationId, notification);
如此,在接收多条不同类型的消息后,打开不同消息,进入消息详细页面NotificationDetailsActivity显示的始终是最后一条消息内容,而不是根据消息类型分类显示各分类的最后一条。
为解决此问题有两种方法,但是没有找到合理的解释,先记录如下,
方法1:为intent添加不同的Action
intent.setAction(""+System.currentTimeMillis());
方法2:PendingIntent.getActivity的第二个参数设为消息类型notificationId,
PendingIntent contentIntent = PendingIntent.getActivity(context, notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
分享到:
相关推荐
- 使用Parcelable接口封装复杂数据对象,以便通过Intent传递。 - 使用BroadcastReceiver处理全局广播Intent,实现跨组件通信。 - 使用PendingIntent将Intent包装成可延迟执行的对象,常用于AlarmManager或...
8. **启动服务(Start Service)**:除了用于Activity间的交互,Intent还可以用于启动和停止Service,传递参数到Service中。 9. **Broadcast Intent**:Intent还能用于广播事件,通过发送BroadcastIntent,可以将...
3. **带数据的Intent**:可以通过putExtra()方法传递数据到目标Activity,如字符串、整数、数组等。 ```java Intent intent = new Intent(this, TargetActivity.class); intent.putExtra("key", "value"); start...
当涉及到不同应用之间的Activity通信时,我们通常会利用Android提供的Intent、Binder机制、ContentProvider、BroadcastReceiver等方法。以下将详细介绍这些通信方式及其应用。 一、Intent通信 Intent是Android中最...
5. **启动 Activity**:通过 `startActivity(intent)` 或 `startActivityForResult(intent, requestCode)` 启动一个新的 Activity。 6. **发送广播**:使用 `sendBroadcast(intent)` 发送广播。 ##### B. Context ...
接着,我们可以通过`setContentIntent()`方法设置点击通知后的动作,通常是一个PendingIntent,可以启动一个新的Activity或服务。此外,还可以使用`addAction()`方法添加可操作的按钮,提供更多的用户选择。 ```...
使用`BroadcastReceiver`或`LocalBroadcastManager`来传递`Service`中的进度信息到`Activity`。每当下载进度改变时,更新`Notification`的进度条。 ```java // 在Service中发送广播 Intent progressIntent = new ...
现代应用常使用深链接让通知直接跳转到具体页面,这需要在PendingIntent中传递带有URI的Intent。 总之,Notification是Android应用与用户沟通的重要手段,理解并熟练运用各种特性和API,能够使你的应用通知更加丰富...
对于交互性,Notification可以包含可点击的意图(Intent),当用户点击通知时,可以通过`setContentIntent()`指定的PendingIntent启动相应的Activity或Service。此外,还可以设置撤销操作的意图,通过`...
在Android开发中,Intent和PendingIntent是两个非常重要的概念,它们在组件间的通信中起到关键作用。Intent可以理解为一种消息传递对象,用于在不同组件之间传递行为和数据,而PendingIntent则是Intent的一种封装,...
- 查看`Notification`的源码,我们可以看到`Notification`类是如何封装和传递通知信息的,以及如何与系统服务进行交互。 - `NotificationCompat.Builder`的源码揭示了如何构建一个复杂的`Notification`,包括如何...
在Android系统中,通知(Notification)是应用与用户交互的重要方式之一,即使用户不直接在应用界面操作,也能接收到应用的...通过阅读并理解提供的示例源码,可以深入学习到如何有效利用`Notification`这一关键特性。
你可以通过传递上下文和通知ID(一个整数,用于区分不同的通知)来初始化它。 ```java NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID); ``` 2. **设置通知的基本属性...
- **Activity启动模式及Intent Flags与栈的关联分析**:了解Activity的启动模式如何影响Intent的传递和行为。 - **设计文档**:官方文档(http://developer.android.com/design/patterns/notifications.html)和译文...
创建自定义音频文件,将其添加到项目资源,使用NotificationCompat.Builder设置声音,构建并设置Intent和PendingIntent以实现点击通知后的行为,以及使用Intent传递数据。这些技术在Android开发中非常常见,能够帮助...
Notification是Android系统中一个重要的组件,它用于在用户界面的顶部状态栏显示消息,即使应用在后台运行或者用户并未直接与应用交互时,也能向用户传递信息。在Android开发中,掌握Notification的正确使用方法至关...
Intent主要用于启动或传递数据给另一个组件,如Activity、Service或BroadcastReceiver,而PendingIntent则是一种延迟执行的Intent,它允许其他应用或系统服务在特定条件下触发我们预先设定的操作。 Intent是Android...
Intent可以携带数据,因此在拍卖过程中,拍卖品的信息可以通过Intent在不同的Activity之间传递。 在拍卖流程中,用户可能会有以下操作: 1. **浏览拍卖列表**:这部分可能是一个ListView或者RecyclerView,显示所有...
在Android开发中,Intent是一个至关重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)以及内容提供者(ContentProvider)之间的交互。...
例如,你可以创建一个Intent,指定要启动的Activity,然后将这个Intent传递给PendingIntent的getActivity()或getService()方法。这样,当用户点击通知时,系统会使用这个PendingIntent来启动指定的组件。在描述的...