美文网首页
Android MediaPlayer重复播放问题

Android MediaPlayer重复播放问题

作者: 挨踢小能手 | 来源:发表于2019-08-29 10:46 被阅读0次

    项目需要做一个语音的IM功能,语音播放使用MediaPlayer实现,当快速点击语音,一个音频播放没有结束,来回播放时,会重现重复播放的问题,下面说明如何解决。

    private MediaPlayer mMediaPlayer;
    private File mLastFile = null;
    
    //播放音频统一方法
    private void doPlay(File mAudioFile) {
        //配置播放器 MediaPlayer
        LogUtil.d("ChatWebViewActivity", "in doPlay");
        if (null != mMediaPlayer) {
            if (mMediaPlayer.isPlaying()) {
                if (!mLastFile.getName().equals(mAudioFile.getName())) {
                    //不为同一文件,暂停上个播放的文件后,播放下个音频文件
                    stopPlay();
                } else {
                    //为同一文件,重复点击,则直接暂停
                    stopPlay();
                    return;
                }
            }
        }
        LogUtil.d("ChatWebViewActivity", "in doPlay notFirst");
        mLastFile = mAudioFile;
        mMediaPlayer = new MediaPlayer();
        try {
            //设置声音文件
            FileInputStream fis = new FileInputStream(mAudioFile);
            FileDescriptor fileD = fis.getFD();
            mMediaPlayer.setDataSource(fileD);
            mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mMediaPlayer.start();
                }
            });
            //设置监听回调
            mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    voiceStatusChange(false, voiceId);
                    stopPlay();
                }
            });
    
            //设置出错的监听器
            mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mp, int what, int extra) {
                    //提示用户
                    stopPlay();
                    //释放播放器
                    return true;
                }
            });
    
            //配置音量,是否循环
            mMediaPlayer.setVolume(1, 1);
            mMediaPlayer.setLooping(false);
            mMediaPlayer.prepareAsync();
        } catch (Exception e) {
            e.printStackTrace();
            stopPlay();
        }
    }
    
    public void stopPlay() {
        if (mMediaPlayer != null) {
            try {
                mMediaPlayer.stop();
            } catch (Exception e) {
                e.printStackTrace();
                mMediaPlayer = null;
                mMediaPlayer = new MediaPlayer();
                mMediaPlayer.stop();
            }
    
            mMediaPlayer.release();
            mMediaPlayer = null;
        }
    }
    

    解决方式为记录上次播放的音频文件,每次播放时,判断是否为同一文件,是同一音频文件,则直接暂停,若为不同的音频文件,则需要先暂停上次播放的音频文件,在播放新的音频文件。

    相关文章

      网友评论

          本文标题:Android MediaPlayer重复播放问题

          本文链接:https://www.haomeiwen.com/subject/asbbectx.html