2.使用VideoView播放视频文件

使用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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值