Java 如何在android中一个接一个地播放视频。我的代码在下面

Java 如何在android中一个接一个地播放视频。我的代码在下面,java,android,Java,Android,这段代码显示我的原始文件中有两个视频,我希望在第一个视频自动完成后播放第二个视频 VideoView videoView = (VideoView) findViewById(R.id.videoView); videoView.start(); videoView.setVideoPath("android.resource://" + getPackageName() + "/"+R.raw.badweather); MediaContr

这段代码显示我的原始文件中有两个视频,我希望在第一个视频自动完成后播放第二个视频

 VideoView videoView = (VideoView) findViewById(R.id.videoView);
        videoView.start();

        videoView.setVideoPath("android.resource://" + getPackageName() + "/"+R.raw.badweather);

        MediaController mc = new MediaController(this);

        mc.setAnchorView(videoView);

        videoView.setMediaController(mc);
        i=1;




        VideoView videoView2 = (VideoView) findViewById(R.id.videoView2);
        videoView2.start();

        videoView2.setVideoPath("android.resource://" + getPackageName() + "/" + R.raw.rain);

        MediaController mc2 = new MediaController(this);

        mc2.setAnchorView(videoView2);

        videoView2.setMediaController(mc2);

这是我的建议。此响应的开头假设您实际上更喜欢使用单个
视频视图。如果情况并非如此,请参见最后的注释

为视频制作资源URI队列。比如:

// "list" is fine for this
List<String> videoUris = new ArrayList<>();
public void onVideoCompletedCallback(final String completedVideoUri) {
    if (!videoUris.isEmpty()) {
        playVideo(videoUris.remove(0));
    }
}
从这里,您可能有两个选择:

从完成回调 一种方法是侦听视频完成回调,然后执行以下操作:

// "list" is fine for this
List<String> videoUris = new ArrayList<>();
public void onVideoCompletedCallback(final String completedVideoUri) {
    if (!videoUris.isEmpty()) {
        playVideo(videoUris.remove(0));
    }
}
从后台线程 或者,如果将
playVideo()
实现为阻塞,则可能会运行一个线程,该线程在这些线程之间循环

new Thread() {
    @Override
    public void run() {
        while (!videoUris.isEmpty()) {
            // assume playVideo() blocks until the video
            // is done playing.
            playVideo(videoUris.remove(0));
        }
    }
}.start();
在这两种情况下,我只提出了一些可行的方法。在Android上,将它们转换为特定的平台绑定还需要做一些工作

但是如果你仍然完全迷路了,那就从看开始吧,这大概是我上面所说的回调的替代品

在Android O上,使用内置队列 事实上,由于我刚刚调出了那个doco,它看起来像是
MediaController
实际上已经在androido预览中支持了一个队列。所以,第三个选择,在安卓O上:使用。但显然,从2017年4月起,几乎没有人会在这里使用Android O Previous,因此选项3更具学术性而非实用性

使用k-many视频视图 如果您确实需要并且想要这样做,则调整上述代码以使用
SortedMap
。地图将从资源uri到视图id。换句话说,从uri到视频源,再到视频视图的android id,在其中播放视频。选择
SortedMap
而不是
HashMap
,因为它将按照您选择的播放顺序保留视频的顺序

Map<String, Integer> videoToViewMap = new SortedMap<>();
videoToViewMap.put("android://blah/blah/video.mp4", R.id.videoView1);
// ... more
Map videoToViewMap=new SortedMap();
videoToViewMap.put(“android://blah/blah/video.mp4“,R.id.videoView1);
// ... 更多

对以前的
videouri
的几个调用将是相同的--
isEmpty()
。但是,当然,您需要编写从/map/

中删除第一项的逻辑,而不是执行类似于
.remove()
的操作。我不知道您在说什么。你有什么更简单的建议吗?@androiduser使用谷歌你的代码有什么问题,你需要具体一点。