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

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

音频的播放

——MediaPlayer播放音频

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

1 start():开始或者恢复播放 2 3 stop():停止播放 4 5 pause():暂停播放

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

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

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

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

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

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

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

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

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

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

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

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

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

1mPlayer.reset();//空闲状态 2 3mPlayer.setDataSource("/sdcard/gequ.mp3"); 4 5mPlayer.prepare(); 6 7mPlayer.start();

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

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

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

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

11)MediaPlayer的状态图

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

这里写图片描述

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

12)其他的方法

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

MediaPlayer生命周期的调用

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

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

—>A:onStop

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

1<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 2 <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Android MediaProvider数据库模式

摘要:AndroidMediaProvider使用SQLite数据库存储图片、视频、音频等多媒体文件的信息,供视频播放器、音乐播放器、图库使用。本文详细分析了AndroidMediaProvider多媒体数据库(以SDK2.3.3为例)的模式(schema),并简要叙述与系统媒体扫描服务MediaScanner的交互。1