Чтобы установить звук для уведомлений в Oreo, необходимо установить звук на NotificationChannel
, а не на Notification Builder
.Вы можете сделать это следующим образом
Uri sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + context.getPackageName() + "/" + R.raw.notification_mp3);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel mChannel = new NotificationChannel("YOUR_CHANNEL_ID",
"YOUR CHANNEL NAME",
NotificationManager.IMPORTANCE_DEFAULT)
AudioAttributes attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION)
.build();
NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID,
context.getString(R.string.app_name),
NotificationManager.IMPORTANCE_HIGH);
// Configure the notification channel.
mChannel.setDescription(msg);
mChannel.enableLights(true);
mChannel.enableVibration(true);
mChannel.setSound(sound, attributes); // This is IMPORTANT
if (mNotificationManager != null)
mNotificationManager.createNotificationChannel(mChannel);
}
Это установит пользовательский звук для ваших уведомлений.Но если приложение обновляется и канал уведомления используется ранее, оно не будет обновлено.то есть вам нужно создать другой канал и установить на него звук, чтобы он работал.Но это покажет несколько каналов в разделе уведомлений информации о приложении вашего приложения.Если вы устанавливаете звук на совершенно новый канал, это нормально, но если вы хотите, чтобы канал использовался ранее, вам нужно удалить существующий канал и воссоздать канал.Для этого вы можете сделать что-то подобное перед созданием канала
if (mNotificationManager != null) {
List<NotificationChannel> channelList = mNotificationManager.getNotificationChannels();
for (int i = 0; channelList != null && i < channelList.size(); i++) {
mNotificationManager.deleteNotificationChannel(channelList.get(i).getId());
}
}