如果你看过我的《android音乐播放简单实现(MediaPlayer)》,那么本篇将会毫无压力。
首先是主界面的三个按钮和一个播放控件

<?xml version="1.0" encoding="utf-8"?>            

在 MainActivity.java 中这里需要用到的是 VideoView 作为视频播放时的显示位置。

 private VideoView videoView;

在 onCreate 里,对界面的按钮和显示位置实例化,并检查权限。

videoView = (VideoView)findViewById(R.id.vdvwFilm);        Button btnPlay = (Button)findViewById(R.id.btnPlay);        Button btnPause = (Button)findViewById(R.id.btnPause);        Button btnReplay = (Button)findViewById(R.id.btnReplay);        btnPlay.setOnClickListener(this);        btnPause.setOnClickListener(this);        btnReplay.setOnClickListener(this);        if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);        }else {            initVideoPath();//初始化MediaPlayer        }

用一个单独的方法 initVideoPath() 来实现视频播放初始化

    private void initVideoPath() {        File file = new File(Environment.getExternalStorageDirectory(), "movie2.mp4");        videoView.setVideoPath(file.getPath());//指定视频文件路径        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {            @Override            public void onPrepared(MediaPlayer mp) {                mp.setLooping(true);//让电影循环播放            }        });    }

onRequestPermissionsResult 中对权限的取得结果进行判断,并针对性操作。如果获得了权限,就执行初始化;如果没有获得权限,就提示用户。

    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        switch (requestCode){            case 1:                if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){                    initVideoPath();                }else{                    Toast.makeText(this, "拒绝权限,无法使用程序。", Toast.LENGTH_LONG).show();                    finish();                }                break;            default:                break;        }    }

在一个 onClick 方法中,统一处理 Play(播放)、Pause(暂停)、Replay(重新播放)的逻辑。

    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.btnPlay:                if(!videoView.isPlaying()){                    videoView.start();//播放                }                break;            case R.id.btnPause:                if(videoView.isPlaying()){                    videoView.pause();//暂停                }                break;            case R.id.btnReplay:                if(videoView.isPlaying()){                    videoView.resume();//重新播放                }                break;        }    }

执行完毕,释放所有资源。

    @Override    protected void onDestroy() {        super.onDestroy();        if(videoView != null){            videoView.suspend();        }    }

完整代码示例:

package com.cofox.myplayvideo;import android.Manifest;import android.content.pm.PackageManager;import android.media.MediaPlayer;import android.os.Environment;import android.provider.MediaStore;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v4.os.EnvironmentCompat;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;import android.widget.VideoView;import java.io.File;public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private VideoView videoView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        videoView = (VideoView)findViewById(R.id.vdvwFilm);        Button btnPlay = (Button)findViewById(R.id.btnPlay);        Button btnPause = (Button)findViewById(R.id.btnPause);        Button btnReplay = (Button)findViewById(R.id.btnReplay);        btnPlay.setOnClickListener(this);        btnPause.setOnClickListener(this);        btnReplay.setOnClickListener(this);        if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);        }else {            initVideoPath();//初始化MediaPlayer        }    }    private void initVideoPath() {        File file = new File(Environment.getExternalStorageDirectory(), "movie2.mp4");        videoView.setVideoPath(file.getPath());//指定视频文件路径        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {            @Override            public void onPrepared(MediaPlayer mp) {                mp.setLooping(true);//让电影循环播放            }        });    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        switch (requestCode){            case 1:                if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){                    initVideoPath();                }else{                    Toast.makeText(this, "拒绝权限,无法使用程序。", Toast.LENGTH_LONG).show();                    finish();                }                break;            default:                break;        }    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.btnPlay:                if(!videoView.isPlaying()){                    videoView.start();//播放                }                break;            case R.id.btnPause:                if(videoView.isPlaying()){                    videoView.pause();//暂停                }                break;            case R.id.btnReplay:                if(videoView.isPlaying()){                    videoView.resume();//重新播放                }                break;        }    }    @Override    protected void onDestroy() {        super.onDestroy();        if(videoView != null){            videoView.suspend();        }    }}

在 AndroidManifest.xml 中配置相应的权限。

<?xml version="1.0" encoding="utf-8"?>    ...

然后我们就可以看到运行结果了。


更多相关文章

  1. Android可以在子线程更新UI吗
  2. ****** 如何使Android应用程序获取系统权限
  3. make_ext4fs制作system.img
  4. Content Provider使用方法以及Android运行时权限申请
  5. Webkit for Android分析
  6. [Android实例] 基于ffmpeg的Android播放器开源代码
  7. Android中使用AdapterViewFlipper实现自动播放的图库
  8. Manifest.permission 这个类定义了android全部的权限共106个
  9. android 保存Bitmap到本地图片

随机推荐

  1. 给大家推荐一些学习android的书籍(第一篇
  2. android实现UI控件自动注入到Activity
  3. [置顶] Android 之ActivityThead、Activi
  4. android开发框架(六)WindowManager机制
  5. Android客户端与服务端交互之登陆示例
  6. 开源一个Android源生Mqtt客户端app + Mqt
  7. Android广播的一些注意事项
  8. Android内存管理之道
  9. Android 中的ListView选中项的背景颜色怎
  10. 【Android每日一讲】2012.11.09 EditText