[video] 01_VideoView(视频播放)

Android 4.0

VideoView(对MediaPlayer和Surface的封装)

效果图:
1、布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    <VideoView
        android:id="@+id/vv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>
2、核心代码:
package cn.zengfansheng.videoplayerdemo;
import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;
public class VideoActivity extends Activity {
    private static final String TAG = "VideoActivity";
    // 用于显示视频的组件
    private VideoView vv;
    private Intent mIntent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);
        vv = (VideoView) this.findViewById(R.id.vv);
        
        play();
    }
    private void play() {
        
        // 获取打开该Activity的Intent,用于选择指定播放器播放视频时用
        mIntent = getIntent();
        String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
        
        String mPath = sdPath+"/我的视频/ols.mp4";
        Log.i(TAG, mPath);
        Uri mUri = Uri.parse("file://" + mPath);
        
        if (mIntent != null) {
            // 1、 把播放地址取出来(选择视频,然后选择播放器)
            // mUri = mIntent.getData();
            // 2、直接从sd卡中取出来
            Log.i(TAG"播放地址:" + mPath);
            // 传递播放地址给VideoView
            vv.setVideoURI(mUri);
        }
        
        // 当准备好了,会有回调
        vv.setOnPreparedListener(new OnPreparedListener() {
            
            @Override
            public void onPrepared(MediaPlayer mp) {
                // 准备好了,处理方案。1,定位到上次播放的地方 seekTo() 2,取消等待画面
                // 准备好了,开始播放
                if (vv != null) {
                    Log.i(TAG"准备完毕,开始播放了");
                    mp.start();
                }
            }
        });
        // 监听播放完成
        vv.setOnCompletionListener(new OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                // 播放完成:1,退出播放器、提示用户是否进入你的软件 2,播放下一个视频
                Toast.makeText(VideoActivity.this"哥们播放完了", Toast.LENGTH_SHORT).show();
                mp.stop();
            }
        });
        // 当播放出错了,也会有一个回调
        vv.setOnErrorListener(new OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                // 进行错误处理:1,提示用户;2,重试,3,进入第三方播放器继续播放;
                Toast.makeText(VideoActivity.this"哥们播放出错了", Toast.LENGTH_SHORT).show();
                return true;
            }
        });
        // 显示系统控件,(快退,暂停/播放,快进,播放的进度)
        vv.setMediaController(new MediaController(this));
    }
}