Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
直接回复消息的Android O通知_Android_Android Notifications_Android 8.0 Oreo_Android Push Notification - Fatal编程技术网

直接回复消息的Android O通知

直接回复消息的Android O通知,android,android-notifications,android-8.0-oreo,android-push-notification,Android,Android Notifications,Android 8.0 Oreo,Android Push Notification,我们正在迁移到Android O中的通知通道系统,我们注意到一旦创建了通道,它的属性就无法更改 我们有下面的场景, -通知通道是使用创建的 NotificationChannel channel = new NotificationChannel(channelId, name, NotificationManager.IMPORTANCE_HIGH); /** *更高的通知重要性:到处显示,制造噪音和偷看。可以使用全屏 *意图。 */ 我们有消息历史记录的消息样式 用户在通知栏中收到消息-

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

我们有下面的场景, -通知通道是使用创建的

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:
同一通知生成器与以前的通知ID一起使用

如果使用额外消息修改现有通知,则可以在同一生成器上使用:

notificationBuilder.setOnlyAlertOnce(true);
这甚至适用于Android O通知通道中的通知。它可以防止振动、声音,但如果频道设置紧急(
重要性\u高
),它仍会偷看


在这篇文章中找到了这个可能的解决方案,它对处理“邮件历史记录”通知有其他很好的想法:

谢谢Piotr的帮助