Android O直接回复消息通知



我们正在迁移到Android O中的Notification Channel系统,我们注意到一旦创建了Channel,它的属性就无法更改。

我们有以下场景,-使用创建通知通道

NotificationChannel channel = new NotificationChannel(channelId, name, NotificationManager.IMPORTANCE_HIGH);

/***更高的通知重要性:到处显示,发出噪音和偷看。可以使用全屏*意图。*/

  • 我们有消息风格和消息历史
  • 用户在通知栏中收到一条消息-将播放通知声音
  • 用户回复消息,我们已经实现了BroadcastReceiver来接收回复消息,并用最新消息再次更新通知,但由于频道重要性很高,通知声音再次播放,这不应该播放以获得更好的用户体验
  • 我们尝试对回复的消息使用addHistoricMessage((,它显示了相同的行为

是否有任何方法可以阻止Android播放回复消息的通知声音。

代码:渠道创建:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = title;
NotificationChannel channel = new NotificationChannel(MESSAGE_CHANNEL, name, NotificationManager.IMPORTANCE_HIGH);
android.app.NotificationManager notificationManager = context.getSystemService(android.app.NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}

通知生成器:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context, MESSAGE_CHANNEL);
NotificationCompat.MessagingStyle style = new NotificationCompat.MessagingStyle(displayName)
.setConversationTitle(conversation.isGroup() ? conversation.getTitle(context) : null);
style.addMessage(message, timestamp, sender);
.
.
.
.
builder.setStyle(style);
builder.setShowWhen(true);
builder.setGroup(MESSAGING_GROUP_LABEL);
builder.setColor(ContextCompat.getColor(context, conversation.getColorSet().getPrimaryColorId()));
setVisibility(builder);
builder.setAutoCancel(true);
setPriority(builder, NotificationCompat.PRIORITY_MAX);
setCategory(builder, Notification.CATEGORY_MESSAGE);
setSmallIcon(builder, R.drawable.ic_stat_ic_notif);
NotificationManagerCompat.from(context).notify(conversation.getConversationId(), notificationId, builder.build());

messageRepliedReceiver:与以前的notificationId 使用相同的通知生成器

如果用额外的消息修改了现有的通知,那么您可以在同一个生成器上使用:

notificationBuilder.setOnlyAlertOnce(true);

这甚至适用于Android O通知频道中的通知。它将防止振动和声音,但如果通道设置为紧急(IMPORTANCE_HIGH(,它仍然会偷看。

这个可能的解决方案是在这篇文章中找到的,它有其他关于处理"消息历史"通知的好主意:Android:如何使用MessagingStyle进行通知而不缓存消息

相关内容

  • 没有找到相关文章

最新更新