Android 使用VideoView播放多个视频
我在vector{,,,}中保存了一个视频列表 我想使用Android原生播放器VideoView一个接一个地播放所有视频。Android 使用VideoView播放多个视频,android,Android,我在vector{,,,}中保存了一个视频列表 我想使用Android原生播放器VideoView一个接一个地播放所有视频。 请提供实现相同功能的示例代码。在视频视图上设置MediaPlayer.OnCompletionListener。视频完成后将调用您的侦听器,因此您可以将视频URI更改为向量中的下一个on。package com.example.alok.myapplicationexample; package com.example.alok.myapplicationexample;
请提供实现相同功能的示例代码。在视频视图上设置MediaPlayer.OnCompletionListener。视频完成后将调用您的侦听器,因此您可以将视频URI更改为向量中的下一个on。
package com.example.alok.myapplicationexample;
package com.example.alok.myapplicationexample;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.MediaController;
import android.widget.VideoView;
import java.util.ArrayList;
public class MultipleVideoPlay extends AppCompatActivity {
private VideoView myVideoView;
private int position = 0;
private MediaController mediaControls;
ArrayList<String> list =new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_multiple_video_play);
myVideoView = (VideoView) findViewById(R.id.video_view);
list.add("https://www.rmp-streaming.com/media/bbb-360p.mp4");
list.add("https://www.rmp-streaming.com/media/bbb-360p.mp4");
list.add("https://www.rmp-streaming.com/media/bbb-360p.mp4");
if (mediaControls == null) {
mediaControls = new MediaController(MultipleVideoPlay.this);
}
mediaControls.setAnchorView(myVideoView);
try {
myVideoView.setMediaController(mediaControls);
myVideoView.setVideoURI(Uri.parse(list.get(0)));
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
myVideoView.requestFocus();
myVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mediaPlayer) {
myVideoView.seekTo(position);
if (position == 0) {
myVideoView.start();
} else {
//if we come from a resumed activity, video playback will be paused
myVideoView.pause();
}
}
});
mediaControls.setPrevNextListeners(new View.OnClickListener() {
public void onClick(View v) {
myVideoView.setMediaController(mediaControls);
// myVideoView.setVideoPath(list.get(0));
myVideoView.setVideoURI(Uri.parse(list.get(0)));
myVideoView.requestFocus();
myVideoView.start();
// code for next
}
}, new View.OnClickListener() {
public void onClick(View v) {
myVideoView.setMediaController(mediaControls);
// myVideoView.setVideoPath(list.get(1));
myVideoView.setVideoURI(Uri.parse(list.get(1)));
myVideoView.requestFocus();
myVideoView.start();
// code for previous
}
});
myVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
myVideoView.setMediaController(mediaControls);
for(String s : list){
myVideoView.setVideoURI(Uri.parse(s));
myVideoView.requestFocus();
myVideoView.start();
}
finish();
// navigateToDashboard();
}
});
myVideoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false;
}
});
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
//we use onSaveInstanceState in order to store the video playback position for orientation change
savedInstanceState.putInt("Position", myVideoView.getCurrentPosition());
myVideoView.pause();
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//we use onRestoreInstanceState in order to play the video playback from the stored position
position = savedInstanceState.getInt("Position");
myVideoView.seekTo(position);
}
}
导入android.content.Intent;
导入android.media.MediaPlayer;
导入android.net.Uri;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.MediaController;
导入android.widget.VideoView;
导入java.util.ArrayList;
公共类MultipleVideoPlay扩展了AppCompative活动{
私人视频视图myVideoView;
私有int位置=0;
私有媒体控制器媒体控制;
ArrayList=新建ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u multiple\u video\u play);
myVideoView=(VideoView)findviewbyd(R.id.video\u视图);
列表。添加(“https://www.rmp-streaming.com/media/bbb-360p.mp4");
列表。添加(“https://www.rmp-streaming.com/media/bbb-360p.mp4");
列表。添加(“https://www.rmp-streaming.com/media/bbb-360p.mp4");
如果(mediaControls==null){
mediaControls=新的MediaController(MultipleVideoPlay.this);
}
mediaControls.setAnchorView(myVideoView);
试一试{
myVideoView.setMediaController(mediaControls);
setVideoURI(Uri.parse(list.get(0));
}捕获(例外e){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
myVideoView.requestFocus();
myVideoView.setOnPreparedListener(新的MediaPlayer.OnPreparedListener(){
已准备好公开作废(MediaPlayer MediaPlayer){
myVideoView.seekTo(位置);
如果(位置==0){
myVideoView.start();
}否则{
//如果我们来自恢复的活动,视频播放将暂停
myVideoView.pause();
}
}
});
mediaControls.setPrevNextListeners(新视图.OnClickListener(){
公共void onClick(视图v){
myVideoView.setMediaController(mediaControls);
//myVideoView.setVideoPath(list.get(0));
setVideoURI(Uri.parse(list.get(0));
myVideoView.requestFocus();
myVideoView.start();
//下一步的代码
}
},新视图。OnClickListener(){
公共void onClick(视图v){
myVideoView.setMediaController(mediaControls);
//myVideoView.setVideoPath(list.get(1));
setVideoURI(Uri.parse(list.get(1));
myVideoView.requestFocus();
myVideoView.start();
//上一页的代码
}
});
myVideoView.setOnCompletionListener(新的MediaPlayer.OnCompletionListener(){
@凌驾
完成时的公共作废(MediaPlayer MediaPlayer){
myVideoView.setMediaController(mediaControls);
用于(字符串s:列表){
myVideoView.setVideoURI(Uri.parse);
myVideoView.requestFocus();
myVideoView.start();
}
完成();
//导航仪表板();
}
});
myVideoView.SetOneErrorListener(新的MediaPlayer.OneErrorListener(){
@凌驾
公共布尔onError(MediaPlayer mp,int what,int extra){
返回false;
}
});
}
@凌驾
SaveInstanceState上的公共无效(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
//我们使用onSaveInstanceState来存储视频播放位置以进行方向更改
savedInstanceState.putInt(“位置”,myVideoView.getCurrentPosition());
myVideoView.pause();
}
@凌驾
RestoreInstanceState上的公共无效(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
//我们使用onRestoreInstanceState从存储位置播放视频播放
position=savedInstanceState.getInt(“position”);
myVideoView.seekTo(位置);
}
}
我已经接受了大部分看似正确的答案。以前我不知道接受的概念,所以在你向我指出这一点后,我现在也不知道。任何人都知道使用VideoView实现播放多个视频背后的想法/逻辑?????感谢Ian的建议。。。将实现这一点并向您提供答复。