我想使用ExoPlayer.setPauseAtEndOfMediaItems,并在自动停止时收听事件。 该文件说:
设置是否在每个媒体项目结束时暂停播放。 这意味着播放器将在当前时间轴中的每个窗口结束时暂停。当发生这种情况时,将通过调用 onPlayWhenReadyChanged 通知听众,原因是 PLAY_WHEN_READY_CHANGE_REASON_END_OF_MEDIA_ITEM。
所以我写了一个使用 MediaLibraryService 的服务,它创建了 ExoPlayer 并设置了监听
onPlayWhenReadyChanged
.
class MyExampleService : MediaLibraryService() {
private val playerListener = object : Player.Listener {
override fun onPlayWhenReadyChanged(playWhenReady: Boolean, reason: Int) {
println("event in MyExampleService: reason=$reason")
super.onPlayWhenReadyChanged(playWhenReady, reason)
}
}
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
override fun onCreate() {
super.onCreate()
val player = ExoPlayer.Builder(this)
.setPauseAtEndOfMediaItems(true)
.build()
player.addListener(playerListener)
... and create media session ...
}
从主要活动中,我创建了一个 MediaBrowser 通过媒体会话连接到此服务。我还设置了监听
onPlayWhenReadyChanged
.的监听器
val playerListener = object : Player.Listener {
override fun onPlayWhenReadyChanged(playWhenReady: Boolean, reason: Int) {
println("event in MediaBrowser: reason=$reason")
super.onPlayWhenReadyChanged(playWhenReady, reason)
}
}
val newBrowser = MediaBrowser.Builder(
applicationContext,
SessionToken(
applicationContext,
ComponentName(applicationContext, MyExampleService::class.java)
)
).buildAsync().await()
newBrowser.addListener(playerListener)
使用
newBrowser.play()
播放音频有效,当自动停止时,两个听众都收到事件,如下所示:
I/System.out: event in MyExampleService: reason=5
I/System.out: event in MediaBrowser: reason=1
我希望
reason
都是 5
,这是 PLAY_WHEN_READY_CHANGE_REASON_END_OF_MEDIA_ITEM 的值,但我从设置为 MediaBrowser 的侦听器中得到了 1
。自动停止时如何获得5
作为reason
?
我正在使用以下 media3 包。
androidx.media3:media3-session:1.0.0-rc02
androidx.media3:media3-exoplayer:1.0.0-rc02