We are migrating to Notification Channel system in Android O, we noticed that once Channel is created, it's properties cannot be changed.
We have the following scenario, - Notification channel is created with,
NotificationChannel channel = new NotificationChannel(channelId, name, NotificationManager.IMPORTANCE_HIGH);
/** * Higher notification importance: shows everywhere, makes noise and peeks. May use full screen * intents. */
Is there any way to prevent Android from playing sound for notification for the replied messages.
code: Channel creation:
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);
}
Notification builder:
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: same notification builder is used with previous notificationId
If existing notification is amended with extra message then you can use on the same builder:
notificationBuilder.setOnlyAlertOnce(true);
This works even for Notifications in Android O Notification Channels. It will prevent vibration, sound, but it will still peek if Channel setting was Urgent (IMPORTANCE_HIGH
).
This possible solution was found in this post that has other great ideas about handling "history of messages" notification: Android: How to use MessagingStyle for notifications without caching messages