使用VideoView播放视频文件
任务1中我们利用MediaPlayer播放音频。
本任务,我们利用VideoView播放视频。
VideoView | Android Developers (google.cn)
Android VideoView 播放视频_android videoview-CSDN博客
9.2 MediaPlayer播放音频与视频 | 菜鸟教程 (runoob.com)
For more advanced use cases that require apps need to create a MediaController that’s attached to the MediaSession and link it to this view by calling setMediaController.
利用 MediaController
来为VideoView添加功能:播放、快进、快退和进度条等功能。
(1)播放res/raw目录下的文件
VideoViewVideoActivity.java
public class VideoViewVideoActivity extends AppCompatActivity implements View.OnClickListener {
/**
* VideoView 播放视频
*/
private static final String TAG = "VideoViewVideoActivity";
private VideoView mVideoViewVideo;
private Button mStartButton;
private Button mPauseButton;
private Button mStopButton;
public static Intent newIntent(Context packageContext) {
Intent intent = new Intent(packageContext, VideoViewVideoActivity.class);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_view_video);
bindViews();
}
private void bindViews() {
mStartButton = (Button) findViewById(R.id.btn_video_view_video_start);
mPauseButton = (Button) findViewById(R.id.btn_video_view_video_pause);
mStopButton = (Button) findViewById(R.id.btn_video_view_video_stop);
mVideoViewVideo = (VideoView) findViewById(R.id.video_view);
mStartButton.setOnClickListener(this);
mPauseButton.setOnClickListener(this);
mStopButton.setOnClickListener(this);
/** 读取放在raw目录下的文件
* android.resource:// :固定字段
* android.byd.audiovedio/ :当前类的所在的包路径
* R.raw.big_buck_bunny :
*/
mVideoViewVideo.setVideoURI(Uri.parse("android.resource://android.byd.audiovedio/" + R.raw.big_buck_bunny));
// 读取本地资源
// 和上面的方式二选一
// File file = new File("//sdcard/Movies/lesson.mp4");
// if (file.exists()) {
// //如果文件存在,则指定要播放的视频
// mVideoViewVideo.setVideoPath(file.getAbsolutePath());
// } else {
// Toast.makeText(this, "要播放的视频文件不存在", Toast.LENGTH_SHORT).show();
// }
// 为 VideoView 设置设置媒体控制器,有进度条、暂停、快进等功能
mVideoViewVideo.setMediaController(new MediaController(this));
// 视频播放完成时回调
mVideoViewVideo.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Log.i(TAG,"The video has finished playing");
// 播放完毕后,重新播放该视频
mVideoViewVideo.start();
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_video_view_video_start:
mVideoViewVideo.start();
break;
case R.id.btn_video_view_video_pause:
mVideoViewVideo.pause();
break;
case R.id.btn_video_view_video_stop:
mVideoViewVideo.stopPlayback();
break;
}
}
}
mVideoViewVideo.setVideoURI(Uri.parse("android.resource://android.byd.audiovedio/" + R.raw.big_buck_bunny))
注意加载setVideoURI中,Uri的设置
android.resource:// :固定字段
android.byd.audiovedio/ :当前类的所在的包路径
R.raw.big_buck_bunny :
(2)播放本地视频
讲上述的uri方式改一下
File file = new File("//sdcard/Movies/lesson.mp4");
if (file.exists()) {
//如果文件存在,则指定要播放的视频
mVideoViewVideo.setVideoPath(file.getAbsolutePath());
} else {
Toast.makeText(this, "要播放的视频文件不存在", Toast.LENGTH_SHORT).show();
}
Environment 类详解
1、android.os.Environment 类中提供了几个静态常量用于标识外部存储的状态,这些状态都是 String 类型,如下所示:
MEDIA_BAD_REMOVAL 在没有挂载前存储媒体已经被移除。
MEDIA_CHECKING 正在检查存储媒体。
MEDIA_MOUNTED 存储媒体已经挂载,并且挂载点可读/写。
MEDIA_MOUNTED_READ_ONLY 存储媒体已经挂载,挂载点只读。
MEDIA_NOFS 存储媒体是空白或是不支持的文件系统。
MEDIA_REMOVED 存储媒体被移除。
MEDIA_SHARED 存储媒体正在通过USB共享。
MEDIA_UNMOUNTABLE 存储媒体无法挂载。
MEDIA_UNMOUNTED 存储媒体没有挂载。
2、android.os.Environment 类中还提供了 Android 系统的标准目录路径,以 String 类型提供,如下所示:
DIRECTORY_ALARMS 系统提醒铃声存放的标准目录。
DIRECTORY_DCIM 相机拍摄照片和视频的标准目录。
DIRECTORY_DOWNLOADS 下载的标准目录。
DIRECTORY_MOVIES 电影存放的标准目录。
DIRECTORY_MUSIC 音乐存放的标准目录。
DIRECTORY_NOTIFICATIONS 系统通知铃声存放的标准目录。
DIRECTORY_PICTURES 图片存放的标准目录
DIRECTORY_PODCASTS 系统广播存放的标准目录。
DIRECTORY_RINGTONES 系统铃声存放的标准目录。static File getDataDirectory() 获得data的目录(/data)。
static File getDownloadCacheDirectory() 获得下载缓存目录。(/cache)
static File getExternalStorageDirectory() 获得外部存储媒体目录。(/mnt/sdcard or /storage/sdcard0)
static File getRootDirectory() 获得系统主目录(/system)