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

Android中如何编程跳转至Exoplayer DefaultTimeBar的指定进度位置

实现方法

DefaultTimeBar仅负责播放进度的UI展示,跳转进度核心是操作与其绑定的ExoPlayer实例,具体实现步骤如下:

  • 首先完成DefaultTimeBar和ExoPlayer的绑定,绑定后进度变化会自动同步到UI
  • 等播放器完成媒体资源加载后,计算目标进度对应的毫秒值,调用seekTo方法跳转即可

Kotlin 代码示例

// 初始化控件和播放器实例
val exoProgress = findViewById<DefaultTimeBar>(R.id.exo_progress)
val exoPlayer = ExoPlayer.Builder(this).build()
// 绑定播放器和进度条,后续进度自动同步
exoProgress.setPlayer(exoPlayer)

// 跳转50%进度的逻辑,建议在播放器STATE_READY状态回调中执行
val totalDuration = exoPlayer.duration
if (totalDuration != C.TIME_UNSET) {
    // 计算50%进度对应的毫秒值
    val targetPosition = (totalDuration * 0.5).toLong()
    // 执行跳转
    exoPlayer.seekTo(targetPosition)
}

Java 代码示例

// 初始化控件和播放器实例
DefaultTimeBar exoProgress = findViewById(R.id.exo_progress);
ExoPlayer exoPlayer = new ExoPlayer.Builder(this).build();
// 绑定播放器和进度条,后续进度自动同步
exoProgress.setPlayer(exoPlayer);

// 跳转50%进度的逻辑,建议在播放器STATE_READY状态回调中执行
long totalDuration = exoPlayer.getDuration();
if (totalDuration != C.TIME_UNSET) {
    // 计算50%进度对应的毫秒值
    long targetPosition = (long) (totalDuration * 0.5);
    // 执行跳转
    exoPlayer.seekTo(targetPosition);
}

注意:必须等播放器回调onPlaybackStateChanged方法、状态为STATE_READY之后再获取总时长,否则拿到的是无效值,跳转不会生效。如果播放的是多段媒体资源,可以调用seekTo(mediaItemIndex, targetPosition)指定对应媒体片段的跳转位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:45:03