Android 使用VideoView播放多个视频

Android 使用VideoView播放多个视频,android,Android,我在vector{,,,}中保存了一个视频列表 我想使用Android原生播放器VideoView一个接一个地播放所有视频。 请提供实现相同功能的示例代码。在视频视图上设置MediaPlayer.OnCompletionListener。视频完成后将调用您的侦听器,因此您可以将视频URI更改为向量中的下一个on。package com.example.alok.myapplicationexample; package com.example.alok.myapplicationexample;

我在vector{,,,}中保存了一个视频列表 我想使用Android原生播放器VideoView一个接一个地播放所有视频。
请提供实现相同功能的示例代码。

在视频视图上设置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的建议。。。将实现这一点并向您提供答复。