Неправильный поток управления громкостью для CastPlayer в Сервисе - PullRequest
0 голосов
/ 07 ноября 2018

Я использую расширение ExoPlayer Google Cast v2.8.4. При воспроизведении контента с использованием CastPlayer кнопки физической громкости на устройстве должны регулировать громкость на приемном устройстве. Это ведет себя как ожидалось, когда CastPlayer содержится в Activity. Однако, когда CastPlayer содержится в Сервисе (например, MediaBrowserServiceCompat), кнопки физической громкости изменяют громкость носителя устройства отправителя.

Я создал 2 примера проектов, демонстрирующих проблему:

  • CastVolumeControlTest показывает правильное поведение потока управления громкостью во время приведения.
  • CastVolumeControlServiceTest показывает неправильное поведение потока управления громкостью во время приведения.

Как показано на рисунке ниже, громкость устройства приведения отображается в представлении управления полной громкостью, но громкость мультимедиа телефона является активным потоком управления, когда CastPlayer находится в службе.

Есть ли способ установить правильный поток управления громкостью в реализации Службы?

enter image description here

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Обходной путь для этой ошибки - установить состояние MediaSession в STATE_PLAYING непосредственно перед отправкой PendingResult для приведения приемника.

val playbackState = PlaybackStateCompat.Builder()
.setState(PlaybackStateCompat.STATE_PLAYING, <position>, <playbackSpeed>)
.build()

mediaSession.setPlaybackState(playbackState)

<send action to cast>

Тогда вам не нужно устанавливать MediaSession в неактивное состояние.

0 голосов
/ 09 ноября 2018

Я определил проблему, и причина не в ошибке в ExoPlayer или расширении Cast. Этот коммит в CastVolumeControlServiceTest устраняет проблему.

После отладки и просмотра журналов устройства я обнаружил, что события ключа громкости были направлены на активную MediaSession. Если установить MediaSession в неактивное состояние, поток управления громкостью будет управлять приемным устройством, поэтому решение состоит в том, чтобы переключить MediaSession в активное / неактивное состояние в зависимости от текущего проигрывателя.

Это не казалось интуитивно понятным, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...