Спасибо @ianhaniballake, это решило мою проблему с моим воспроизведением звуков в стиле мультимедиа все время, когда состояние проигрывателя меняется.

пор, как была добавлена ​​поддержка Android O, Android-устройства, работающие на O, получают оповещение (тональный или вибрационный) всякий раз, когда уведомление об управлении мультимедиа в моем приложении обновляется (метаданные или состояние воспроизведения изменяются). Я ищу способ отключить это предупреждение, поскольку оно не применимо к уведомлениям в стиле мультимедиа.

Вот код, который я использую для создания уведомления управления медиа:

MediaDescriptionCompat description = metadata.getDescription();
String artistName = metadata.getString(MediaMetadataCompat.METADATA_KEY_ARTIST);
String albumName = metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM);
Bitmap largeIcon = BitmapFactory.decodeResource(playbackService.getResources(),
        R.drawable.vector_global_defaultsong);

NotificationCompat.Builder notificationBuilder = new NotificationCompat
        .Builder(playbackService, NotificationHelper.CHANNEL_MEDIA_CONTROLS)
        .setColor(ContextCompat.getColor(playbackService, R.color.colorAccent))
        .setSmallIcon(R.drawable.logo_light_filled)
        .setContentTitle(description.getTitle())
        .setContentText(playbackService.getString(R.string.song_list_subtitle_format,
                artistName, albumName))
        .setContentIntent(createContentIntent())
        .setDeleteIntent(MediaButtonReceiver.buildMediaButtonPendingIntent(playbackService,
                PlaybackStateCompat.ACTION_STOP))
        .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
        .setOngoing(playbackState.getState() == PlaybackStateCompat.STATE_PLAYING)
        .setLargeIcon(largeIcon);

notificationBuilder.setStyle(new android.support.v4.media.app.NotificationCompat.MediaStyle()
        // show previous, play/pause, and next in compact view
        .setShowActionsInCompactView(addActions(notificationBuilder))
        .setMediaSession(sessionToken));
showNotification(notificationBuilder.build());

, , ,

private void showNotification(final Notification notification) {
    if (!started) {
        mediaController.registerCallback(mediaControllerCallback);
        playbackService.startForeground(NOTIFICATION_ID, notification);
        started = true;
    } else {
        notificationManager.notify(NOTIFICATION_ID, notification);
    }

    if (playbackState.getState() == PlaybackStateCompat.STATE_PAUSED) {
        playbackService.stopForeground(false);
    }
}

Вот код, который я использую для создания канала уведомлений:

public static final String CHANNEL_MEDIA_CONTROLS = "media_controls";

public static void createNotificationChannels(Context context) {
    if (android.os.Build.VERSION.SDK_INT >= 26) {
        NotificationChannel mediaControlsChannel = new NotificationChannel(CHANNEL_MEDIA_CONTROLS,
                context.getString(R.string.notification_channel_media_controls),
                NotificationManager.IMPORTANCE_HIGH);
        mediaControlsChannel.setShowBadge(false);
        getNotificationManager(context).createNotificationChannel(mediaControlsChannel);
    }
}

Обновить: НастройкаshowBadge вfalse на канале уведомлений ничего не появляется. Я все еще получаю значок на значке приложения, когда отображается уведомление управления мультимедиа. Таким образом, похоже, что атрибуты канала уведомлений, которые я установил, не применяются.

Ответы на вопрос(1)

Решение Вопроса

Перенос уведомлений MediaStyle на Android O, вы должны использоватьIMPORTANCE_LOW, который не содержит звука -IMPORTANCE_HIGH у каналов есть звук, связанный с ними.

Android уже меняет порядокMediaStyle Уведомления выше в трее, поэтому использование более высокой важности не является необходимым, как это было в предыдущих версиях Android.

ПРИМЕЧАНИЕ. После изменения важности необходимо удалить данные приложения или переустановить приложение, чтобы изменения вступили в силу в канале уведомлений.

 Ryan07 сент. 2017 г., 15:26
Привет @ianhanniballake. Спасибо за ответ. Прошлой ночью я тестировал разные уровни важности, в том числеIMPORTANCE_LOW, но безрезультатно. Я все еще получаю сигнал тревоги на моем Pixel под управлением Oreo.
 ianhanniballake07 сент. 2017 г., 16:10
Имейте в виду, что каналы уведомлений не редактируются после создания (кроме пользователя). Попробуйте очистить данные в вашем приложении, чтобы полностью удалить канал.
 Ryan07 сент. 2017 г., 17:04
Ах, имеет смысл. Очистка данных приложения сделала свое дело. Большое спасибо!
 ianhanniballake07 сент. 2017 г., 17:05
Если это помогло ответить на ваш вопрос, обязательно примите ответ, чтобы удалить вопрос из очереди вопросов без ответа.
 Andrew Lam17 сент. 2017 г., 23:58
Спасибо @ianhaniballake, это решило мою проблему с моим воспроизведением звуков в стиле мультимедиа все время, когда состояние проигрывателя меняется.

Ваш ответ на вопрос