MediaController с ExoPlayer: skipToNext() и skipToPrevious() не работают

Я пытаюсь подключить пользовательский интерфейс моего медиаплеера к ExoPlayer, который работает в MediaBrowserCompatService, чтобы при касании воспроизведения/паузы работала быстрая перемотка вперед, перемотка назад и т. д.

Из моей деятельности я звоню:

mediaController.transportControls.play() / .pause()
mediaController.transportControls.fastForward() / .rewind()

И это прекрасно работает.

Вызов:

mediaController.transportControls.skipToNext() and
mediaController.transportControls.skipToPrevious()

хотя вообще не работает.

В моем MediaBrowserCompatService я установил соответствующее состояние воспроизведения мультимедиа в сеансе мультимедиа, но программный вызов перехода к предыдущему и следующему не будет работать.

 stateBuilder = PlaybackStateCompat.Builder()
                .setActions(PlaybackStateCompat.ACTION_PLAY
                        or PlaybackStateCompat.ACTION_PLAY_PAUSE
                        or PlaybackStateCompat.ACTION_SKIP_TO_NEXT
                        or PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS)
 setPlaybackState(stateBuilder.build())

Экзоплеер подготовлен с помощью ConcatenatingMediaSource(), и пропуск к следующему и предыдущему треку из медиа-уведомления работает.

Кто-нибудь знает, что здесь происходит не так?


person Rik van Velzen    schedule 07.12.2019    source источник


Ответы (1)


Похоже, вам нужно явно добавить QueueNavigator MediaSessionConnector. Что-то вроде этого:

val mediaSessionConnector = MediaSessionConnector(mediaSession)
val queueNavigator = object : TimelineQueueNavigator(mediaSession){
        override fun getMediaDescription(player: Player?, windowIndex: Int): MediaDescriptionCompat {
            return mediaItems[windowIndex].description
        }
    }
 mediaSessionConnector.setQueueNavigator(queueNavigator)

При установленном навигаторе очереди нет необходимости устанавливать:

PlaybackStateCompat.ACTION_SKIP_TO_NEXT
or PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS

на stateBuilder.

person Rik van Velzen    schedule 07.12.2019
comment
Правильно, при указании навигатора очереди эти действия добавляются и обрабатываются за вас. Еще одна частая ошибка, которую я вижу, — это переопределение MediaSession путем создания другого обратного вызова: обратите внимание, что MediaSessionConnector реализует обратный вызов «под капотом», поэтому, скорее всего, что-то сломается, указав его вручную. - person Paul Lammertsma; 28.02.2021