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));
}
} |