You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:14:54