Android应用增加动画,视频,音乐等多媒体功能,因此为手机提供音频录制,播放,视频录制,播放的功能十分重要。Android提供了常见音频,视频的编码,解码机制,Android支持的音频格式有MP3,WAV和3GP等,支持的视频格式有MP4和3GP等。Android提供了这些多媒体的支持类,可以非常方便地在手机应用中播放音频,视频等。这些多媒体数据可以来自Android应用的资源文件,也可以来自外部存储器上的文件,也可以来自网络的文件流。不仅如此,Android也提供了对摄像头,麦克风的支持,因此也可以十分方便地从外部采集照片,视频,音频等多媒体信息。

音频的播放

——MediaPlayer播放音频

1)MediaPalyer进行播放控制的方式:

     start():开始或者恢复播放stop():停止播放pause():暂停播放

2)MediaPlayer装载指定音频文件的方式:

     static MediaPlayer create(Content,Uri):从指定Uri来装载音频文件,并返回新创建的MediaPlayer对象。static MediaPlayer create(Content,int resid):从redid资源ID来装载音频文件,并返回新创建的MediaPlayer对象。**注:上面这两个方法使用起来很简单,但这两个方法每次都会返回新的MediaPlayer.如果程序需要播放多个音频文件,使用该方法就不太合适了。此时可通过setDataSource方法装载指定的音频文件。**MediaPlayer m = new MediaPlayer():只需要创建一个对象setDataSource(String path):指定装载path路径所代表的文件setDataSource(FileDescriptor fd,long offset,long length):指定装载fd所代表的文件中从offset开始,长度为length的文件内容。setDataSource(FileDescriptor fd):指定装载fd所代表的文件                    setDataSource(Context,Uri):指定装载Uri所代表的文件**注:执行setDataSource方法之后,MediaPlayer并未真正装载那些音频文件,还需要调用prepare()方法准备装载音频。**

3)播放应用raw的资源文件

     MediaPlayer m=MediaPlayer.create(this,R.raw.apple);m.start();

4)播放应用raw的资源文件

     MediaPlayer m=new  MediaPlayer();m.setDataSource(Context,Uri.parse(      "android.resource://"+getPackageName()+"/"+R.raw.apple"))

5)播放应用的原始资源文件

a)调用Context的getAssets()获取AssetManager;b)调用AssetManager的openFd(String name)方法打开指定的原生资源.返回AssetFileDescriptor对象c)调用AssetFileDescriptor的getFileDescriptor()方法,返回FileDescriptor对象d)创建MediaPlayer对象,调用setDataSource(FileDescriptor)方法。f)调用MediaPlayer的start(),stop(),pause()方法控制播放即可

6)播放外部存储器上音频文件

a)创建MediaPlayer对象,调用setDataSource("/sdcard/apple.mp3")b)调用MediaPlayer对象的prepare()方法c)调用MediaPlayer的start(),stop(),pause()方法控制播放即可

7)播放来自网络的音频文件

a)根据网络上的音频文件所在的位置创建Uri对象。Uri  uri = Uri.parse("http://www.baidu.com/song.mp3");b)创建MediaPlayer对象,调用setDataSource(Context,Uri);c)调用MediaPlayer对象的prepare()方法d)调用MediaPlayer的start(),stop(),pause()方法控制播放即可

8)如播放下一首歌曲的代码:

mPlayer.reset();//空闲状态mPlayer.setDataSource("/sdcard/gequ.mp3");mPlayer.prepare();mPlayer.start();

9)MediaPlayer还提供了事件监听器的方法

//注:这个监听器要起作用的话isLooping要为false
setOnCompletionListener():播放完成事件绑定事件监听器setOnErrorListener():播放错误事件绑定事件监听器setOnPreparedListener():调用prepare()方法时触发该监听器setOnSeekCompleteListener():调用seek()方法时触发该监听器

10)Mediaplayer除了调用prepare()方法准备声音之外,
还可以调用

     prepareAsync()来准备声音,他们的区别在于:prepareAsync()是异步的,它不会阻塞当前的UI线程。

11)MediaPlayer的状态图

注:MediaPlayer有自己的生命周期,与宿主Activity的生命周期无关

 reset():清空MediaPlayer中的数据setDataSource():设置音频数据prepare():准备装载音频数据prepareAsync():准备装载音频数据(异步)seekTo():重新定位到音频数据的什么位置,单位毫秒seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。start():pause():stop():release():释放MediaPlayer资源

12)其他的方法

  setLooping(true):是否重复播放setAudioStreamType() 设置使用的音频流

MediaPlayer生命周期的调用

A(播放音乐的界面)—>B

A:onPause()—>B:onCreate,onStart/onResume

—>A:onStop

如果是播放SD卡中的音乐的话,需要加上相应权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/>

android开发笔记之多媒体—播放音频(音乐)相关推荐

  1. android开发笔记之多媒体—图形图像处理

    --图像的两种分类: 位图 例子:单色位图(只有两种颜色(黑白),每一个像素点占一位)256位图(每一个像素点有256个颜色,每一个像素点需要占一个字节)24位位图(每个像素点占3个字节)位图图像(b ...

  2. android开发笔记之多媒体—撕衣服(开心一下)

    效果图: 看到是不是很激动呢,在这里讲一下原理,其实很简单,就是两张图片叠在一下,当鼠标触摸的时候改变上面那张图片的透明度就可以了. 核心代码: public class MainActivity e ...

  3. Android开发笔记(一百二十六)自定义音乐播放器

    MediaRecorder/MediaPlayer 在Android手机上面,音频的处理比视频还要复杂,这真是出人意料.在前面的博文< Android开发笔记(五十七)录像录音与播放>中, ...

  4. Android开发笔记(五十七)录像录音与播放

    媒体录制MediaRecorder MediaRecorder是Android自带的录制工具,通过操纵摄像头和麦克风完成媒体录制,既可录制视频,也可单独录制音频.其中对摄像头Camera的介绍参见&l ...

  5. Android开发笔记(序)写在前面的目录

    知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平.因此博主就想,入门的东西咱就不写了,人不能老停留在入 ...

  6. Android开发笔记(序)

    本开发笔记,借鉴与其他开发者整理的文章范例与心得体会.在这里作为开发过程中的一个总结与笔记式记录. 如有侵犯作者权益,请及时联系告知删除.俗话说:集百家成一言,去粕成金. ************** ...

  7. Android开发笔记(序)写在前面的目录大全

    转自  湖前琴亭 的博客https://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面 ...

  8. Andriod开发之二十:Android开发笔记(序)写在前面的目录

    https://blog.csdn.net/aqi00/article/details/50038385 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教 ...

  9. Android开发笔记(一百零七)统计分析SDK

    APP统计分析 用户画像 对程序员来说,用户画像就是用户的属性和行为:通俗地说,用户画像是包括了个人信息.兴趣爱好.日常行为等血肉丰满的客户实体.用户画像是精准营销的产物,企业通过收集用户的行为,然后 ...

  10. Android开发笔记(一百零八)智能语音

    智能语音技术 如今越来越多的app用到了语音播报功能,例如地图导航.天气预报.文字阅读.口语训练等等.语音技术主要分两块,一块是语音转文字,即语音识别:另一块是文字转语音,即语音合成. 对中文来说,和 ...

最新文章

  1. Django 模板HTML转义和CSRF4.3
  2. [实战] 用数人云,部署弹性 ELK 集群就五步
  3. eureka自我保护时间_Spring Cloud Eureka 自我保护机制
  4. Android移动开发之【Android实战项目】渐变的TextView小漂亮代码
  5. 【2022年蓝桥杯】蓝桥杯第一次海选考试题(5题考试大二)(C#题解)
  6. 为什么同事写的代码那么优雅~
  7. leetcode 399. 除法求值(bfs)
  8. 多态情况下,怎么用基类指针去访问基类的虚函数?
  9. OLAP引擎:基于Druid组件进行数据统计分析
  10. 前后端分离后 前端获得session数据_机器学习模型部署--打通前后端任督二脉
  11. 无意间发现的java的相关资料
  12. Android+struts2+JSON方式的手机开发(Login)
  13. java 字符串长度截取_java中截取指定字符串长度函数
  14. Zookeeper Leader选举算法及选举过程
  15. 如何设置excel回车换行
  16. 如何修改MySQL数据库密码
  17. 【代码审计】buu_[GWCTF 2019]枯燥的抽奖
  18. 复合字面量(compound literals)详解
  19. STM32电机PID速度控制
  20. 淘宝村峰会 | 对话:农村电商让老百姓有尊严地脱贫

热门文章

  1. linux挂steam游戏时长,steam挂游戏时长工具
  2. 使用GDI来绘制简易验证码
  3. Lodop 打印使用笔记
  4. 《Renewable Energy》论文格式
  5. 【读书笔记】统计学:从数据到结论 第七章
  6. java中utf8转成gbk,java中GBK转UTF-8乱码的解决方法
  7. 无需证书微信小程序实现人脸识别—E证通
  8. 如何混淆.NET 程序集与 ConfuserEx
  9. 全国大学生数学建模竞赛首战一等奖经验分享
  10. BScroll案例--如何确定中间部分的高度