android 使用MediaPlayer实现音乐播放--基础介绍
Android 多媒体框架支持播放各种常见媒体类型,因此 可轻松地将音频、视频和图片集成到您的应用中。你可以播放音频或 从存储在应用资源(原始资源)的媒体文件(原始资源)中获取独立文件 或从通过网络连接到达的数据流中,所有这些均使用 MediaPlayer
API。
java部分代码路径
\frameworks\base\media\java\android\media\MediaPlayer.java
下图是MediaPlayer的操作的生命周期和状态图,图片介绍来源于官方文。
上面MediaPlayer完整状态图指明哪些方法可将 MediaPlayer
从一种状态变为另一种状态。 例如,当您创建新的 MediaPlayer
时,它处于 Idle 状态。此时,您应通过调用 setDataSource()
,带来 更改为“Initialized”状态。然后,您需要使用 prepare()
或 prepareAsync()
方法。时间 MediaPlayer
准备就绪后,就会进入 Prepared 状态,这意味着您可以调用 start()
。 使其可以播放媒体内容此时,如图所示 您可以按如下方式在已开始、已暂停和播放完成状态之间切换 调用诸如 start()
, pause()
和 seekTo()
, 等。当您 调用 stop()
,但请注意, 在您呼叫start()
之前, 再次准备 MediaPlayer
。
MediaPlayer
可以使用 系统资源。 因此,您应始终采取额外的预防措施, MediaPlayer
实例的挂起时间超出必要时间。当您 则应始终调用 release()
,以确保 系统资源才会被正确释放例如,如果你是 使用 MediaPlayer
,并且您的 activity 收到对 onStop()
的调用时,您必须释放 MediaPlayer
, 因为它 当您的 activity 未与产品互动时,就应该继续保留该 activity 并无意义。 用户(除非你正在后台播放媒体,这在下一部分中进行了介绍)。 当然,当 activity 恢复或重启时,您需要 请创建一个新的 MediaPlayer
,并在继续播放之前重新对其进行准备。
MediaPlayer主要用到的方法有以下:
方法 | 作用 |
MediaPlayer适合播放大的实时性要求不高的音频,其主要方法有: static MediaPlayer create(Context context,int resid) | 创建MediaPlayer对象,用resid指定的资源作为要播放的音频 |
void setDataSource(String path) | 设置要播放的音频文件位置,参数path为文件路径或Uri |
void prepare() | setDataSource并不载入资源,需要调用此方法准备资源 |
void start() | 开始/恢复播放 |
void stop() | 停止播放,调用后无法再播放 |
void pause() | 暂停播放,可以再用start恢复播放 |
void reset() | 重置到刚刚创建后的状态 |
void release() | 释放掉相关的资源 |
void seekTo(int msec) | 从指定位置播放,参数为用毫秒定义的位置 |
int getCurrentPosition() | 得到当前播放位置,即播放的毫秒数 |
int getDuration() | 得到音频长度,即总的毫秒数 |
boolean isPlaying() | 得到当前音频是否正在播放 |
void setLooping(boolean looping) / boolean isLooping() | 循环播放 |
void setVolume(float leftVolume, float rightVolume) | 设置音量 |
int getAudioSessionId() | 获取音频会话 ID |
setOnPreparedListener(MediaPlayer.OnPreparedListener listener) | 音频源准备好后调用 |
setOnCompletionListener(MediaPlayer.OnCompletionListener listener) | 音频播放完毕后调用 |
setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener) | 网络流缓冲的状态变化时调用 |
setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener) | Seek操作完成后调用 |
setOnErrorListener(MediaPlayer.OnErrorListener listener) | 发生错误时调用 |
以上是关于MediaPlayer简单介绍,更完整可以关注后面或者查看谷歌文档:MediaPlayer 概览 | Android media | Android Developers