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

Android Media3播放器如何阻止播放列表自动跳转至下一项?

解决Media3播放列表单媒体项播放完毕后暂停的问题

你当前设置Player.REPEAT_MODE_OFF的行为是播放完整个列表后停止,但单媒体项播放完毕会自动跳转到下一项并继续播放(如果playWhenReady为true)。要实现每个媒体项播放完毕后暂停,等待用户手动触发下一项,可以通过监听播放器的自动跳转事件来拦截并暂停,具体实现如下:

方法:监听播放器的自动媒体项跳转事件

给ExoPlayer注册Player.Listener,拦截自动跳转行为并暂停播放器,同时回到刚播放完成的媒体项位置:

// 记录当前正在播放的媒体项索引
private var currentPlayingItemIndex = -1

player.addListener(object : Player.Listener {
    override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
        super.onMediaItemTransition(mediaItem, reason)
        // 拦截自动跳转下一项的行为
        if (reason == Player.MEDIA_ITEM_TRANSITION_REASON_AUTO) {
            player.pause()
            // 回到刚播放完成的媒体项(如果索引有效)
            if (currentPlayingItemIndex >= 0) {
                player.seekTo(currentPlayingItemIndex, C.TIME_UNSET)
            }
        } else {
            // 手动跳转、初始化等场景,更新当前播放索引
            currentPlayingItemIndex = player.currentMediaItemIndex
        }
    }

    override fun onPlaybackStateChanged(playbackState: Int) {
        super.onPlaybackStateChanged(playbackState)
        // 播放器准备就绪并开始播放时,记录当前媒体项索引
        if (playbackState == Player.STATE_READY && player.playWhenReady) {
            currentPlayingItemIndex = player.currentMediaItemIndex
        }
    }
})

补充说明

  • 该逻辑会拦截所有自动跳转下一项的行为(包括播放完当前项后的自动跳转),暂停播放器并保留在刚播放完成的媒体项位置。
  • 用户点击媒体会话或UI上的「下一项」按钮时,属于手动触发的跳转(reason不为MEDIA_ITEM_TRANSITION_REASON_AUTO),会正常切换到下一项并播放。
  • 如果你希望播放完媒体项后停留在该项目的结尾,无需额外调用seekTo,暂停后播放器会自然停在结尾位置;如果需要回到项的开头,可以将C.TIME_UNSET替换为0L。

内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:05:40