如何在ExoPlayer触发STATE_ENDED时追加歌曲并播放该歌曲
ExoPlayer播放结束后追加歌曲并播放的解决方案
原代码存在两个核心问题:
- 播放结束后
currentMediaItem可能为空,强制非空断言!!会引发空指针异常,导致代码执行中断 - 添加媒体项后未定位到新添加的条目,直接调用
play()无法触发播放
修正后的代码如下:
override fun onPlaybackStateChanged(playbackState: Int) { super.onPlaybackStateChanged(playbackState) if (playbackState == STATE_ENDED) { val player = playerHolder.getPlayer() // 空安全处理,避免空指针 val targetItem = player.currentMediaItem ?: return // 将目标媒体项追加到播放列表末尾 player.addMediaItem(targetItem) // 获取新添加项的索引(列表最后一位) val newItemIndex = player.mediaItemCount - 1 // 定位到新添加的媒体项起始位置 player.seekTo(newItemIndex, 0L) // 启动播放 player.play() } }
额外说明:
- 如果播放器在
STATE_ENDED状态下无法直接触发播放,可以在seekTo后添加player.prepare(),确保播放器处于就绪状态 - 若只需追加一次而非循环追加,可添加布尔标志位控制逻辑仅执行一次
内容的提问来源于stack exchange,提问作者John Glen
相关产品推荐
相关产品推荐

