《Android第一行代码》first reading 十一

Android多媒体应用 二

音频和视频播放

音频播放

步骤:

  1. 创建MediaPlayer
  2. 绑定监听
  3. 运行时权限处理
  4. 完善onClick()
  5. 重写onDestory(),释放MediaPlayer

代码

//布局就是4个按钮
public class MainActivity extends AppCompatActivity {
    MediaPlayer mediaPlayer = new MediaPlayer();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//ButterKnife绑定
        ButterKnife.bind(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{
            initMediaPlayer();//初始化MediaPlayer
        }
    }

    private void initMediaPlayer() {
        try {
            File file = new File(Environment.getExternalStorageDirectory(),"music.mp3");
            mediaPlayer.setDataSource(file.getPath());//指定音频路径
            mediaPlayer.prepare();//让MediaPlayer进入准备阶段
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

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

    @OnClick({R.id.play,R.id.pause,R.id.stop,R.id.jump})
    public void onClick(View v){
        switch (v.getId()){
            case R.id.play:
                if (!mediaPlayer.isPlaying()){
                    mediaPlayer.start();
                }
                break;
            case R.id.pause:
                if (mediaPlayer.isPlaying()){
                    mediaPlayer.pause();
                }
                break;
            case R.id.stop:
                if (mediaPlayer.isPlaying()){
                    mediaPlayer.reset();
                    initMediaPlayer();
                }
                break;
            default:
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mediaPlayer != null){
            mediaPlayer.stop();
            mediaPlayer.release();//释放掉与MediaPlayer是否正在播放音频
        }
    }
}

MediaPlayer常用方法:

方法名 功能描述
setData() 设置要播放的音频的位置
prepare() 在开始播放前调用此方法完成准备工作
start() 开始或继续播放音频
pause() 暂停播放音频
reset() 将MediaPlayer对象重置到刚刚创建时的状态
seekTo() 从指定的位置开始播放音频
stop() 停止播放。调用这个方法后的MediaPlayer对象无法再播放音频
release() 释放掉与MediaPlayer对象相关的资源
isplaying() 判断当前MediaPlayer是否正在播放音频
getDuration() 获取载入的音频文件的时长

注意:
我们还要在AndroidMainfest文件中添加上权限:

视频播放

步骤:

  1. 获取VideoView
  2. 绑定监听
  3. 运行权限处理
  4. 完善onClick()
  5. 重写 onDestory(),释放VideoView

代码:

//布局是三个button加一个VideoView
public class VideoActivity extends AppCompatActivity {
    @BindView(R.id.video_view)
    VideoView videoView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);
        ButterKnife.bind(this);
//运行和权限处理
        if (ContextCompat.checkSelfPermission(VideoActivity.this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
                PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(VideoActivity.this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
        }else{
            initVideoPath();
        }
    }

    private void initVideoPath() {
        File file = new File(Environment.getExternalStorageDirectory(),"movie.mp4");
        //初始化VideoView
        videoView.setVideoPath(file.getPath());
    }

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

    @OnClick({R.id.play_video,R.id.pause_video,R.id.replay_video})
    public void onClick(View v){
        switch (v.getId()){
            case R.id.play_video:
                if (!videoView.isPlaying()){
                    videoView.start();
                }
                break;
            case R.id.pause_video:
                if (videoView.isPlaying()){
                    videoView.pause();
                }
                break;
            case R.id.replay_video:
                if (videoView.isPlaying()){
                    videoView.resume();
                }
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (videoView != null){
            videoView.suspend();//释放资源
        }
    }
}

VideoView常用方法:

方法名 功能描述
setVideoPath() 设置要播放的视频文件的位置
start() 开始或继续播放视频
pause() 暂停播放视频
resume() 将视频重头开始播放
seekTo() 从指定的位置开始播放视频
isPlaying() 判断当前是否正在播放视频
getDuration() 获取载入的视频文件的时长
suspend() 释放资源

注意
两个示例代码都需要在手机的根目录下预先放好一个音频和视频。

示例来源于《Android第一行代码》,边读边敲,益于学习。

你可能感兴趣的:(《Android第一行代码》first reading 十一)