Android 8 Oreo уведомления не воспроизводить пользовательский звук - PullRequest
0 голосов
/ 11 сентября 2018

Мое приложение воспроизводит пользовательский звук для входящего уведомления (тип уведомления 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());
        }
...