要从使用MessagingStyle的通知中获取消息,可以按照以下步骤进行:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = getString(R.string.channel_name);
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
channel.setDescription(description);
// 设置通知铃声
channel.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION), null);
// 启用通知灯
channel.enableLights(true);
// 设置通知灯的颜色
channel.setLightColor(Color.RED);
// 启用震动
channel.enableVibration(true);
// 设置通知的震动模式
channel.setVibrationPattern(new long[]{100, 200, 300, 400, 500});
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
NotificationCompat.MessagingStyle messagingStyle = new NotificationCompat.MessagingStyle("Me");
messagingStyle.setConversationTitle("Conversation Title");
// 添加消息
messagingStyle.addMessage(
new NotificationCompat.MessagingStyle.Message("Hello", System.currentTimeMillis(), "Sender 1"));
messagingStyle.addMessage(
new NotificationCompat.MessagingStyle.Message("Hi", System.currentTimeMillis(), "Sender 2"));
// 创建通知
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_message)
.setContentTitle("New Message")
.setContentText("You have received new messages")
.setStyle(messagingStyle)
.setAutoCancel(true);
// 显示通知
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
notificationManagerCompat.notify(notificationId, builder.build());
// 判断Android版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// 获取通知的消息列表
List messages = notificationManagerCompat.getActiveNotifications()[0]
.getNotification().extras.getParcelableArrayList(NotificationCompat.EXTRA_MESSAGES);
for (NotificationCompat.MessagingStyle.Message message : messages) {
String text = message.getText().toString();
String sender = message.getSender();
long timestamp = message.getTimestamp();
// 处理消息
Log.d(TAG, "Text: " + text);
Log.d(TAG, "Sender: " + sender);
Log.d(TAG, "Timestamp: " + timestamp);
}
}
上述代码示例中,我们首先创建了一个通知频道,然后使用MessagingStyle添加了多个消息,最后创建并显示了通知。然后,我们通过notificationManagerCompat.getActiveNotifications()
方法来获取活动通知的列表,并从中获取通知的消息列表。然后可以遍历消息列表,从中获取每条消息的文本、发送者和时间戳等信息。