播放音频需要借助
MediaPlayer
对象,MediaPlayer
可以播放本地音频和网络音频。文本的目的是为了尝试使用MediaPlayer
实现最简单的音频播放功能,下一篇将全面说明MediaPlayer
对象。
实现音频播放功能分为以下步骤:
创建MediaPlayer对象
、指定音频文件资源
、添加监听
、预处理
、播放暂停操作
、销毁资源
[第一步]
:创建MediaPlayer对象
MediaPlayer mediaPlayer = new MediaPlayer();
[第二步]
:指定音频文件资源
try {
File file = new File(Environment.getExternalStorageDirectory(), "music_test.mp3");
mediaPlayer.setDataSource(file.getPath());
} catch (IOException e) {
e.printStackTrace();
}
当然,别忘了添加读写外部存储权限。
[第三步]
:添加监听
添加预处理完成监听程序
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
}
});
播放完成监听
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
}
});
播放异常监听
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false;
}
});
[第四步]
:预处理
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalStateException e){
mediaPlayer.start();
e.printStackTrace();
}
每次执行预处理方法前必须重新指定音频文件资源路径,当执行预处理方法后,预处理完成的回调方法就会执行,这时,开始播放音频。
[第五步]
:播放暂停操作
//播放
mediaPlayer.start();
//暂停
mediaPlayer.pause();
[第六步]
:销毁MediaPlayer对象资源
@Override
protected void onDestroy() {
super.onDestroy();
if(mediaPlayer != null){
//释放资源
mediaPlayer.release();
mediaPlayer.setOnPreparedListener(null);
mediaPlayer.setOnCompletionListener(null);
mediaPlayer.setOnErrorListener(null);
}
}
当然,释放MediaPlayer资源的同时顺便将监听置为null,防止因为观察者设计模式造成的内存泄漏。
注意事项
(1)播放音频必须执行音频资源的路径(本地路径或者网络路径);
(2)指定音频资源的路径后,必须告诉MediaPlayer
对象,初始化已经准备好了,可以进行音频操作了,也就是执行mediaPlayer.prepare()
方法,预处理有一个预处理完成的监听,执行mediaPlayer.prepare()
方法后会触发预处理完成监听,只有预处理完成之后才可以对音频进行播放暂停等操作;
(3)如果连续执行mediaPlayer.start()
方法时,必须要等到前面一个音频播放完成之后才能重新播放,所以一般会有这样的判断
if(!mediaPlayer.isPlaying()){
mediaPlayer.start();
}
(4)当重新指定播放资源时,必须执行
mediaPlayer.reset();
和
mediaPlayer.prepare();
(5)为了防止内存泄漏,需要在onDestroy
里面释放资源,代码上面已有。
[本章完...]
网友评论