Уведомление Android O для сообщения прямого ответа

Мы переходим на систему каналов уведомлений в 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: тот же конструктор уведомлений используется с предыдущим идентификатором уведомления


person Sivakumar Chellamuthu    schedule 27.07.2018    source источник


Ответы (1)


Если в существующее уведомление добавлено дополнительное сообщение, вы можете использовать его в том же конструкторе:

notificationBuilder.setOnlyAlertOnce(true);

Это работает даже для уведомлений в каналах уведомлений Android O. Это предотвратит вибрацию и звук, но он все равно будет заглядывать, если для параметра Channel установлено значение «Срочно» (IMPORTANCE_HIGH).

Это возможное решение было найдено в этом посте, в котором есть другие отличные идеи по обработке уведомления «история сообщений»: Android: как использовать MessagingStyle для уведомлений без кеширования сообщений

person Piotr Brzozowski    schedule 18.09.2018
comment
Спасибо Петр помогло - person Sivakumar Chellamuthu; 24.09.2018