播放音频
在Android 中播放音频文件一般都使用MediaPlayer 类来实现,它对多种格式的音频文件提供了非常全面的控制方法。下表列出了MediaPlayer类中的一些较为常用的控制方法:
方法名 | 功能描述 |
---|---|
setDataSource() | 设置要播放的音频的位置 |
prepare() | 在开始播放之前调用这个方法完成准备工作 |
start() | 开始或者继续播放音频 |
pause() | 暂停播放音频 |
reset() | 将MediaPlayer对象重置到刚刚创建的状态 |
seekTo() | 从指定的位置开始播放音频 |
stop() | 停止播放音频,调用这个方法后的MediaPlayer对象无法再播放音频 |
release() | 释放掉与MediaPlayer对象相关的资源 |
isPlaying() | 判断当前MediaPlayer是否正在播放音频 |
getDuration() | 获取载入的音频文件的时长 |
初始化之前需要解决权限问题(6.0以上需要运行时权限)
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}else {
initMedaiPlayer();
}
}else {
initMedaiPlayer();
}
初始化MediaPlayer
public void initMedaiPlayer(){
File file = new File(Environment.getExternalStorageDirectory(),"/qqmusic/arScene/bgm");
try {
mediaPlayer.setDataSource(file.getPath()); //指定音频文件的路径
mediaPlayer.prepare(); //让MediaPlayer 进入准备状态
}catch (IOException e) {
e.printStackTrace();
}
}
初始化完成后,就是MediaPlayer的使用
//开始播放
mediaPlayer.start();
//暂停
mediaPlayer.pause();
//停止
mediaPlayer.reset(); //回到初始化
initMediaPlayer()
当不需要使用MediaPlayer时,需要停止并释放资源,一般在onDesory中处理
protected void onDestory(){
if(mediaPlayer != null){
mediaPlayer.stop();
mediaPlayer.release();
}
}
播放视频
视频播放主要用到类 VideoView 来实现,这个类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器,VideoView 与 MediaPlayer 比较类似,主要方法如下:
方法名 | 功能描述 |
---|---|
setVideoPath() | 设置要播放的视频文件的位置 |
start() | 开始或继续播放视频 |
pause() | 暂停播放视频 |
resume() | 将视频重头开始播放 |
seekTo() | 从指定的位置开始播放视频 |
isPlaying() | 判断视频是否正在播放 |
getDuration() | 获取载入的视频文件的时长 |
权限问题
同音频播放一样,在初始化VideoView 之前,需要判断Android版本并实现运行时权限(和音频播放相同,这里就不重复)
初始化VideoView
//获取videoView控件
videoView = (VideoView)findViewById(R.id.videoView);
//加载视频文件
File file = new File(Environment.getExternalStorageDirectory(), "movie.mp4");
videoViews.setVideoPath(file.path());
操作VideoView 对象
//开始播放视频
videoView.start();
//暂停播放
videoView.pause();
//重新播放
videoView.resume();
当最终不需要,或Activity关闭时,需要释放资源
protected void onDestory(){
if(videoVieew != null){
videoView.suspend();
}
}
注意:为了兼容低版本,音频和视频都需要在AndroidManifest.xml 中添加权限
<uses-permission android:name="android.permission.WRITE_EXTERAL_STORAGE" />
闲话
为什么 VideoView 和 MediaPlayer 如此相似呢,其实VideoView 只是帮我们做了一个封装,它的背后仍然是使用 MediaPlayer 来对视频文件进行控制的。