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

如何让使用URI的VideoView实现视频循环播放?

解决VideoView无法循环播放的问题

嘿,我来帮你搞定这个视频循环的问题!你现在的代码每次进入onResume都会重新初始化VideoView并启动播放,但没有设置播放完成后的回调逻辑,所以视频播完就停了。咱们来改一改,实现自动循环:

步骤1:把VideoView改成类成员变量

首先,把VideoView的引用移到Activity的类成员里,不要每次onResume都去findViewById,这样既高效又方便后续设置监听:

public class YourActivity extends AppCompatActivity {
    private VideoView videoView; // 类成员变量

    // ... 其他代码
}

步骤2:在onCreate里初始化并设置循环监听

在onCreate方法里完成视频的初始化工作,同时给VideoView设置播放完成的监听器,当视频播完时自动重启:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_activity_layout); // 替换成你的布局文件

    videoView = findViewById(R.id.videoview1);
    Uri videoPath = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.great);
    videoView.setVideoURI(videoPath);

    // 设置播放完成回调,实现循环
    videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            videoView.start(); // 视频播放完毕后,重新启动播放
        }
    });
}

步骤3:优化onResume和onPause的逻辑

修改onResume,只在视频没播放的时候启动,避免重复触发导致视频从头播放;同时在onPause里暂停视频,避免后台继续播放耗电:

@Override
protected void onResume() {
    super.onResume();
    // 只有当视频未播放时才启动,防止重复start
    if (!videoView.isPlaying()) {
        videoView.start();
    }
}

@Override
protected void onPause() {
    super.onPause();
    // 暂停视频,避免后台播放
    if (videoView.isPlaying()) {
        videoView.pause();
    }
}

为什么这样改?

  • 之前每次onResume都重新创建VideoView实例并加载视频,不仅效率低,而且没有循环逻辑,播完就停止了。
  • 现在把VideoView作为成员变量只初始化一次,加上OnCompletionListener,就能在视频播放完成后自动重启,实现循环效果。
  • 新增的onPause处理能提升用户体验,避免应用退到后台后视频还在偷偷播放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:54:29