android使用MediaPlayer播放raw目录下的mp3

使用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对象可能被回收了,需要将对象申明为成员变量,经测试,可以相当程度的降低播放不完整率,但并不能完全避免。

如果有知道,还望留言告知

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值