Мое приложение воспроизводит пользовательский звук для входящего уведомления (тип уведомления FCM).Для Android <8 все работает нормально, в Android 8, если у меня открыто приложение, оно все равно играет, если приложение не закрыто.Я пытался установить все, изменить имя и важность идентификатора канала, очистить данные и удалить / переустановить приложение, но ничего не работает. </p>
Это мой соответствующий код для уведомлений Android O:
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 , intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri = null;
if (remoteMessage.getNotification().getSound() != null && !remoteMessage.getNotification().getSound().equals("default")) {
Uri newSoundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
+ "://" + this.getPackageName() + "/raw/" +
remoteMessage.getNotification().getSound());
if (newSoundUri != null)
defaultSoundUri = newSoundUri;
else defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
}
else defaultSoundUri =
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
grantUriPermission("com.android.systemui", defaultSoundUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String channelId = getString(R.string.default_notification_channel_id);
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.ic_stat_ic_notification)
.setContentTitle(getString(R.string.app_name))
.setContentText(remoteMessage.getNotification().getBody())
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setDefaults( Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE)
.setContentIntent(pendingIntent)
.setOnlyAlertOnce(false);
// Creating an Audio Attribute
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_ALARM)
.build();
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Since android Oreo notification channel is needed.
NotificationChannel channel = new NotificationChannel(channelId,
channelId,
NotificationManager.IMPORTANCE_DEFAULT);
// AudioAttributes att = new AudioAttributes.Builder()
// .setUsage(AudioAttributes.USAGE_NOTIFICATION)
// .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
// .build();
notificationBuilder.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
channel.setSound(defaultSoundUri, audioAttributes);
channel.setDescription(remoteMessage.getNotification().getBody());
notificationManager.createNotificationChannel(channel);
notificationManager.notify(0, notificationBuilder.build());
}