使用android自带的 MediaPlayer 播放 mp3 时,需要注意的几个点:
1. 使用:
——>初始化:
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.example_song);
——>播放:
mediaPlayer.start();
——>释放:
mediaPlayer.stop();
mediaPlayer.release();
2. 增加播放监听:
——> 错误监听:
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// 当MediaPlayer发生错误时调用此方法
// 在此处可以进行适当的错误处理,例如弹出错误提示框等
return false;
}
});
tip:当MediaPlayer发生错误时,onError方法将被调用。在此处可以进行适当的错误处理,例如弹出错误提示框等。返回值为false表示该错误不会被MediaPlayer处理,而是由调用者自己处理。如果返回true,则表示MediaPlayer将处理该错误并继续执行
——>准备就绪:
mediaPlayer.setOnPreparedListener(new MediaPlayer.onPreparedListener(){ @Override public void onPrepared(MediaPlayer mp) { LogUtils.e("MP3Player————onPrepared"); mp.start(); } });
——>播放完成:
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 当MediaPlayer播放完毕时调用此方法
// 在此处可以执行一些相关操作,如更新UI界面等
}
});
3. 关于释放
在setOnCompletionListener监听器中,不需要手动调用mediaPlayer.stop()、mediaPlayer.release()方法。
setOnCompletionListener方法会在MediaPlayer播放完成后自动调用,并且在该方法中调用stop()和release()方法可能会导致不可预知的问题。
当MediaPlayer播放完毕时,它会自动停止,并处于已停止状态。如果您仍然需要使用MediaPlayer,可以选择再次调用MediaPlayer.create()方法创建一个新的MediaPlayer对象来播放其他音频文件。如果不再需要使用MediaPlayer,可以在合适的时候调用release()方法来释放它所占用的资源。
4. 关于初始化
MediaPlayer.create()和new MediaPlayer()的区别在于它们创建MediaPlayer对象的方式不同。
MediaPlayer.create()是一个静态方法,它可以直接从资源文件或文件路径创建MediaPlayer对象,并自动完成MediaPlayer的一些初始化工作,例如设置数据源、缓冲区大小等。具体来说,MediaPlayer.create()方法接受两个参数:上下文和资源ID或文件路径,它会自动调用MediaPlayer类的构造方法并设置数据源等参数,最终返回一个已经准备好的MediaPlayer对象。
而使用new MediaPlayer()则需要手动设置MediaPlayer的数据源、缓冲区大小等参数,这需要花费额外的代码来完成。例如,您需要调用setDataSource()方法设置数据源,调用prepare()方法来准备MediaPlayer等等。需要注意的是,如果您选择使用new MediaPlayer()方法创建MediaPlayer对象,则需要在适当的时候调用release()方法来释放它所占用的资源。
因此,如果您需要快速、简单地创建一个MediaPlayer对象并播放音频文件,可以使用MediaPlayer.create()方法。但如果您需要更多的控制和自定义,例如处理播放过程中的缓冲问题、设置特定的播放模式等,则需要使用new MediaPlayer()方法来创建MediaPlayer对象并手动配置参数。
5. 重复初始化:
在调用MediaPlayer.create()方法时,系统会为每个调用创建一个新的MediaPlayer对象,并在调用完成后自动释放与该对象相关的资源。因此,多次调用MediaPlayer.create()方法并不会导致性能问题。
但是,需要注意的是,每个MediaPlayer对象都会占用一定的内存资源,因此如果您在应用程序中频繁地创建和释放MediaPlayer对象,则可能会对系统的内存资源造成一定的影响,从而导致应用程序的性能问题。如果您需要频繁地播放不同的音频文件,可以考虑使用单个MediaPlayer对象,并在需要播放不同文件时调用setDataSource()方法来设置不同的数据源。
另外,需要注意的是,如果多个MediaPlayer对象同时存在并播放音频文件,则可能会导致多个音频文件同时播放,从而造成混乱和不良的用户体验。因此,在应用程序中,建议使用单个MediaPlayer对象来播放音频文件,并且在需要切换音频文件时,先调用reset()方法来清除之前的状态,然后再调用setDataSource()方法设置新的数据源,并重新调用prepare()方法来准备MediaPlayer对象。
6. 关于播放不完整:
网上说播放不完整是由于在播放过程中,MediaPlayer对象可能被回收了,需要将对象申明为成员变量,经测试,可以相当程度的降低播放不完整率,但并不能完全避免。文章来源:https://www.toymoban.com/news/detail-547933.html
如果有知道,还望留言告知文章来源地址https://www.toymoban.com/news/detail-547933.html
到了这里,关于android使用MediaPlayer播放raw目录下的mp3的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!