Android音频播放器的实现
来源:互联网 发布:癌症诊断书生成软件 编辑:程序博客网 时间:2024/06/04 19:46
多媒体在娱乐设备的用户体验中占了很大一部分,在硬件设备的存储容量不断上升的同时,需要开发功能完善、高质量的多媒体处理软件。任何一门技术,如果了解了它的基本原理和框架,就有一种一览众山小的感觉。因此,我们先了解一下android音频播放状态。
播放一首歌,可以分为很多状态。一切准备就绪等待播放时的状态为Prepared状态,就是已经准备好的意思,对应的正在准备的状态时Prearing状态(该方法与PrepareAsync()方法配合使用,当异步准备完成时会自动触发OnPreParedListener.onPrepared()方法进入Prepared状态)。
准备状态以前肯定要初始化,取名为Initalized状态。而初始化之前必须有一个状态标识创建MediaPlayer对象(或者复位)的完成,这个状态就是Idle状态。在此必须指出,MediaPlayer对象的各种方法只能在一些特定的状态下使用,否则会引发IllegalStateException异常。比如:通过reset()方法进入的Idle状态,如果调用不是该状态下可以调用的方法,会触发OnErrorListener.onError()方法,之后MediaPlayer对象进入Error状态。
好了,上面所讲的都是没有听到声音时MediaPlayer的状态。在Prepared状态调用start()方法后即可听到美妙的声音,此时进入的状态时Started。音乐的播放过程中如果想暂停,调用pause()方法即可进入暂停状态Paused;音乐的播放过程中如果想终止,调用stop()方法即可进入Stopped状态。Paused状态也可以调用stop()方法进入Stopped状态,或者调用start()方法进入Started状态继续播放音乐。而Stopped状态如果想再次播放音乐,必须回到准备状态Prepared(或者Preparing)。
还有一种情况是音乐自然播放完毕,此时会自动触发OnCompletionListener的onCompletion()方法进入播放完成状态PlaybackCompleted。
播放音乐需要用到系统资源,因此也必须释放资源。正常释放资源的方法是调用release()方法进入End状态,异常释放资源由系统调用。如果由于某些原因MediaPlayer对象出现了错误,会触发OnErrorListener.onError()事件,此时MediaPlayer对象即进入Error状态。
到此为止,MediaoPlayer的10中状态已经全部介绍完毕。
下面通过一个例子来说明Android平台音频播放器的实现过程。
播放器的界面如下所示:
布局文件的代码在后面将和工程文件一起上传。
初始化部分的代码,获取控件id并且创建MediaPlayer()方法,由于是源代码中文件使用create函数比较方便。
播放部分的代码如下:
暂停部分的代码如下:
停止部分的代码如下:
上面的代码都是根据MediaPlayer的生命状态周期写出的,各位朋友们可以对照着看。
MediaPlayer实现的音乐播放器工程目录
- Android音频播放器的实现
- Android实现播放音频
- iOS音频播放 (六):简单的音频播放器实现
- iOS音频播放 (六):简单的音频播放器实现
- iOS音频播放 (六):简单的音频播放器实现
- iOS音频播放 (六):简单的音频播放器实现
- iOS音频播放 (六):简单的音频播放器实现
- android实现简单音频播放器
- Android音频的播放
- MTK 音频播放器的实现
- 基于android多媒体框架实现播放APE音频的实现
- android 音频播放 以及 二维码模块中音频播放和震动(vibrate)的实现
- android MediaPlayer 简易播放器的实现 及类似斗地主音频池实现
- 嵌入式音频播放的实现
- Android实现OGG音频的无缝循环播放
- Android提高之MediaPlayer播放网络音频的实现方法
- Android中音频的播放
- Android中音频的播放
- 八 s3c2440 linux 触摸屏 驱动代分析
- Flash as3事件学习
- AFNetWorking请求时, “Request failed: unacceptable content-type: text/html”
- Android多行文本折叠展开效果
- 查看电脑配置指令大全
- Android音频播放器的实现
- [iOS] 使用WebViewJavascriptBridge实现OC与JS交互
- linux常用命令之压缩与解压缩命令
- Spring MVC表单标签库实例代码入门教程
- 常用px,pt,em换算表
- ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法
- 一个简单的Netty服务器例子
- oc对象实现sequence
- (一)Android新手---跟我一起走进Android---android发展史