Android(安卓)MediaPlayer重复播放问题
16lz
2021-01-26
项目需要做一个语音的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标准调用播放器流程
- Android(安卓)Audio Focus的应用(requestAudioFocus)
- android 极光推送 自定义声音
- Android开发实战使用(VR技术实现360°全景视频播放功能)
- android实现在线播放流媒体
- android之帧动画实现
- android音乐播放器开发 SweetMusicPlayer 播放本地音乐
- Android音乐播放器-图片素材准备及布局
- 解决vlc-android播放http视频退出问题