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使用谷歌你的代码有什么问题,你需要具体一点。