java如何在安卓中播放一个又一个视频。我的代码在下面
这段代码显示我的原始文件中有两个视频,我希望在第一个视频自动完成后播放第二个视频
VideoView videoView = (VideoView) findViewById(R.id.videoView);
videoView.start();
videoView.setVideoPath("安卓.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("安卓.resource://" + getPackageName() + "/" + R.raw.rain);
MediaController mc2 = new MediaController(this);
mc2.setAnchorView(videoView2);
videoView2.setMediaController(mc2);
# 1 楼答案
以下是我的建议。此响应的开头假设您实际上更喜欢使用单个
VideoView
。如果情况并非如此,请参见最后的注释为视频制作一个资源URI队列。比如:
现在,编写一个播放视频的代码:
从这里,你可能有两个选择:
从完成回调
一种方法是监听视频完成回调,然后执行以下操作:
从后台线程
或者,如果将
playVideo()
实现为阻塞,则可能会运行一个线程来循环它们在这两种情况下,我只提出了一些可行的方法。在Android上,将它们转换为特定的平台绑定仍有一些工作要做
但是如果你仍然完全迷路了,从^{} 开始,这可能是我上面所说的回调的一个大致替代品
在Android O上,使用内置队列
事实上,由于我刚刚调出了那个doco,看起来} 。但显然,从2017年4月起,几乎没有人会在这里使用Android O Previous,因此选项3更具学术性而非实用性
MediaController
实际上已经支持Android O预览版的队列。所以,第三种选择,在Android O上:使用^{使用k-many视频视图
如果您确实需要并且想要这样做,那么调整上面的代码以使用
SortedMap
。地图将从资源uri到视图id。换句话说,从uri到视频源,再到视频视图的android id,在其中播放它。之所以选择SortedMap
而不是HashMap
,是因为它会将视频的顺序保留为您选择播放它们的顺序例如,对过去是
videoUris
的调用中有几个是相同的isEmpty()
。但是,当然,您需要编写从/map/中删除第一项的逻辑,而不是执行.remove()
之类的操作