0

我正在尝试将我的 Media Player 的 UI 连接到在 MediaBrowserCompatService 中运行的 ExoPlayer,以便当我触摸播放/暂停、快进、倒带等时将起作用。

在我的活动中,我打电话给:

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())

exoplayer 使用 ConcatenatingMediaSource() 准备好,并且从媒体通知跳到下一个和上一个轨道是有效的。

有人知道这里出了什么问题吗?

4

1 回答 1

0

似乎您必须明确添加 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)

使用 queueu 导航器设置,无需设置:

PlaybackStateCompat.ACTION_SKIP_TO_NEXT
or PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS

在 stateBuilder 上。

于 2019-12-07T22:56:56.450 回答