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加一个VideoViewpublic 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第一行代码》,边读边敲,益于学习。

更多相关文章

  1. Android(安卓)6.0运行时权限解决方案
  2. Android(安卓)保存图片到本地
  3. Android(安卓)权限列表permission说明
  4. android 得到唯一码和电话号码
  5. Android(安卓)动态获取创建与删除文件权限
  6. android 开启关闭wifi服务
  7. Android(安卓)中如何复制文件的操作
  8. 原YUV格式的解析 Android(安卓)NV21 视频采集
  9. [Android开发]android 跨进程通信之content provider

随机推荐

  1. Android(安卓)Layout XML属性
  2. Android学习路线
  3. Android(安卓)核心分析 之八------Androi
  4. 如何解决:Android中 Error generating fin
  5. 分享17个老罗Android开发视频教程(免费下
  6. Android(安卓)进程间通信:AIDL
  7. Android(安卓)内存溢出解决方案(OOM) 整理
  8. android:shape的使用
  9. Android(安卓)NDK STL
  10. android 回车键事件编程