Android O的直接回复消息通知

时间:2018-07-27 01:12:02

标签: android android-notifications android-8.0-oreo android-push-notification

我们正在迁移到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

一起使用

1 个答案:

答案 0 :(得分:2)

如果现有通知已用其他消息修改,则可以在同一构建器上使用:

notificationBuilder.setOnlyAlertOnce(true);

此功能甚至适用于Android O通知频道中的通知。它将防止振动,声音,但是仍会窥视“频道”设置是否为紧急(IMPORTANCE_HIGH)。

此帖子中找到了这种可能的解决方案,其中还有其他一些处理“消息历史”通知的好主意:Android: How to use MessagingStyle for notifications without caching messages