android - 带有 ExoPlayer 的 MediaController:skipToNext() 和 skipToPrevious() 不起作用
问题描述
我正在尝试将我的 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() 准备好,并且从媒体通知跳到下一个和上一个轨道是有效的。
有人知道这里出了什么问题吗?
解决方案
似乎您必须明确添加 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 上。
推荐阅读
- java - HikariCP 升级到 Debian 10 (mariadb)
- java - Spring Boot 值注入
- java - Intellij 字体颜色不变
- laravel - 一般错误:1364 字段“user_id”没有默认值(SQL:在 laravel-8 中插入“产品”.....
- onesignal - OneSignal 中等效的 Firebase 云消息传递主题
- junit - 为什么 Junit assertThat() 传递两个对象,尽管对象不相等?
- node.js - NodeJS MongoDB计数字段中具有相同值的条目
- python - Python request() 获取 json 在浏览器中与脚本中给出不同的正文
- swift - 为什么 Swift NumberFormatter 需要一个不间断的空间才能正常工作?
- c++ - 只用谷物反序列化一些变量