所遇到的问题 1、音频播放完成后 播放完成监听回调

 public void onCompletion(MediaPlayer mp) {}

方法走了两次。

2、点击再次重新播放时,报

IllegalStateException

错误。

3、销毁activity时依然报2中的错误。

首先贴出一个工具类的部分代码

//单例
public static VoiceMediaPlayer getInstance(){if(instance==null){synchronized (VoiceMediaPlayer.class){if(instance==null){instance=new VoiceMediaPlayer();}}}return instance;}//初始化public void initMediaPlayer(){if(mediaPlayer==null){mediaPlayer=new MediaPlayer();}mediaPlayer.setVolume(1.0f,1.0f);mediaPlayer.setLooping(false);}//停止播放public void stopMediaPlayer(){mediaPlayer.stop();mediaPlayer.reset();}//播放public void play(final String path, final MediaPlayer.OnCompletionListener listener, final MediaPlayer.OnPreparedListener preparedListener){try{//mediaPlayer.reset();mediaPlayer.setDataSource(path);mediaPlayer.prepareAsync();mediaPlayer.setOnCompletionListener(listener);mediaPlayer.setOnPreparedListener(preparedListener);}catch (IOException e){e.printStackTrace();}}//销毁public void destroyMediaPlayer(){try{if(mediaPlayer!=null){mediaPlayer.stop();//mediaPlayer.reset();mediaPlayer.release();mediaPlayer=null;}}catch (Exception e){e.printStackTrace();}}

首先第一个问题,播放完成怎么会调用两次回调方法呢?

那是我在回调方法onComletion中调用了停止播放的方法,上面代码可以看到里面调用了mediaPlayer.reset方法。

这个方法的的作用是重置MediaPlayer对象为刚刚创建的状态(我没有在源码中找到调用会触发播放完成的回调方法),

我们只能从字面意思上来分析,刚刚播放完成,就调用了reset方法,重置了刚刚的状态也就是播放完成的状态,从而再次

调用了播放完成的状态(一定要重点理解是刚刚,这里我不确定我的理解是否正确,若有错误,请指出加以改正,目前从

实践上证明是这样子的)。

第二个问题,播放完成点击重新播放为何会报错呢?原因还是我在第一问题的解决基础上,播放完成我没有再调用停止播放方法

,而在此调用播放走play播放的方法时候,mediaPlayer没有重置状态,还是这个reset()方法,总是它,于是需要在上述play

方法里面准备异步加载前调用一下reset方法。

第三个问题,其实还是这个reset方法,每次都是它,好烦它。

当activity销毁时,需要先把mediaPlayer释放掉,mediaplayer.release释放之前仍需要先重置mediaplayer的状态,调用reset方法。

后两个个问题都是在通过源码中得到解释,很简单,就不再赘述源码。

以上问题都是自己开发的时候不注意,用第三方的用的多,用原生自己写的时候就不那么严禁导致的,以此记录勉励自己,加油!

下一篇 音量焦点问题。

简单的音频播放功能MediaPlayer使用中所遇到的坑。相关推荐

  1. 安卓java音乐播放器下一曲_Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个 ...

  2. 利用Service实现简单的音乐播放功能

    1.本例利用Service实现简单的音乐播放功能,下面是效果图.(点击开始播放开启服务,音乐播放,点击"停止播放"关闭服务,音乐停止播放.) 2.核心代码: MusicServic ...

  3. android音乐播放器实现,Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个 ...

  4. Android音频开发(五)如何存储和解析最简单的音频wav文件

    我们大家都知道,无论是文字.图像还是声音,都必须以一定的格式来组织和存储起来,然后其它的软件再以相同的协议规则,相应的格式才能去打开解析这一段数据,例如,对于原始的图像数据,我们常见的格式有 YUV. ...

  5. Unity 进阶 之 实现简单的音频可视化封装(包括音频和麦克风)

    Unity 进阶 之 实现简单的音频可视化封装(包括音频和麦克 目录 Unity 进阶 之 实现简单的音频可视化封装(包括音频和麦克 一.简单介绍 二.实现原理 三.注意事项 四.效果预览 五.实现步 ...

  6. HTML5用audio标签做一个最简单的音频播放器

    在做系统的时候,要求做一个音频播放器,就在网上查找了一些资料,发现这样的资料还是很千篇一律的,EasyUI框架并没有给我们一个音频播放器的功能,在bootstrap上有,但是也是结合html5来写的, ...

  7. 使用LM386的简单Arduino音频播放器和放大器

    原文地址:https://circuitdigest.com/microcontroller-projects/arduino-audio-music-player 使用LM386的简单Arduino ...

  8. 利用 FFmpeg 进行简单的音频拼接 降噪 合成

    ** 利用 FFmpeg 进行简单的音频拼接 降噪 合成 ** 项目需要M4a 格式的音频拼接,由于 m4a 不能像 mp3 直接以流的方式进行拼接,所以简单学习了一下 FFmepeg .在这里分享一 ...

  9. 微信小程序 音频播放功能createInnerAudioContext

    微信小程序 音频播放功能createInnerAudioContext 效果: 前端界面代码: <view class="cu-modal {{ModalName=='DialogMo ...

最新文章

  1. 为什么结构主机和全局编录服务器不能放在同一个域控制器上?
  2. ASP.NET自定义控件组件开发 第一章 第二篇 接着待续
  3. ACM模板--邻接矩阵 有向图 搜索算法
  4. 笔记-信息化与系统集成技术-区块链的特征
  5. boost::geometry::num_interior_rings用法的测试程序
  6. 12 哈希表相关类——Live555源码阅读(一)基本组件类
  7. 断点vue_vue 事件代理
  8. Linux 系统安装配置PHP服务(源码安装)
  9. asp.net三层架构制作新闻管理_为什么使用PHP制作网站?
  10. 提高电脑反应速度_大家都能看懂的电脑内存条挑选技巧,电脑的内存条就应该这样选!...
  11. Yolo训练自己的数据集,将json格式转换成txt文件格式
  12. oppo计算机找不到,oppo手机照片在电脑显示不出来怎么办啊
  13. 8个免费恶搞照片在线生成网站
  14. 【水哥RPA】配置水哥RPA环境变量报错的解决方法
  15. Cesium深入浅出之如何获取帧率
  16. Java 正则表达式 中的 任意字符
  17. matlab画立体星星教程,抖音星空画的人怎么画 制作教程完整视频步骤分享
  18. 传感网应用开发(环境部署)
  19. 医学图像处理和深度学习入门
  20. 算法课程设计:使用Python完成可视化的五子棋AI

热门文章

  1. 月薪两万的“土豪”师兄,加个微信吧!
  2. Fresco高斯模糊使用
  3. 当代女性修身养性的箴言书——《读史做女人》
  4. Tyrion中文文档(含示例源码)
  5. 试题 算法训练 翻转旋转变换
  6. 【论文翻译】转移学习推断跨异构网络的社会联系
  7. 小组项目--闲置物品交换系统-第一周
  8. 1.3、操作系统的发展和分类
  9. 通过Js来设置页面样式
  10. ChatGPT指令大全(建议收藏)