这一篇我们介绍一下Android的音频和视频播放,重点讲解Mediaplayer这个类。 Android的MediaPlayer包含了Audio和Video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlaer来实现的。
概述
首先我们看一下Mediaplayer的生命周期图
下面我们看一下MediaPlayer提供的方法:
- addTimedTextSource(Context context, Uri uri, String mimeType)方法:添加一个外部定时文本文件,重载方法:addTimedTextSource(String path, String mimeType)、addTimedTextSource(FileDescriptor fd, long offset, long length, String mime)、addTimedTextSource(FileDescriptor fd, String mimeType)
- attachAuxEffect(int effectId)方法:给播放器附加一个播放效果
- create(Context context, Uri uri, SurfaceHolder holder, AudioAttributes audioAttributes, int audioSessionId)方法:实例化Mediaplayer的方法,重载方法有:create(Context context, Uri uri, SurfaceHolder holder)、create(Context context, int resid, AudioAttributes audioAttributes, int audioSessionId)、create(Context context, int resid)、create(Context context, Uri uri)
- deselectTrack(int index)方法:取消曲目
- getAudioSessionId()方法:获取音乐的SessionID
- getCurrentPosition()方法:获取当前播放位置
- getDuration()方法:获取文件的播放时间
- getPlaybackParams()方法:获取播放参数
- getSelectedTrack(int trackType)方法:获取选中的曲目
- getSyncParams()方法:获取Audio或者Vedio的同步模式
- getTimestamp()方法:获取当前的播放位置作为一个时间戳
- getTrackInfo()方法:获取轨道信息数组
- getVideoHeight()方法:获取Vedio播放器的高度
- getVideoWidth()方法:获取Vedio播放器的宽度
- isLooping()方法:检查播放器是否在循环
- isPlaying()方法:检查播放器是否在播放
- pause()方法:暂停
- prepare()方法:准备播放器进行播放
- prepareAsync():异步准备播放器
- release()方法:释放与当前Mediaplayer相关的资源
- reset()方法:重置播放器状态
- seekTo(int msec)方法:跳转到特定时间位置
- selectTrack(int index)方法:选中一个曲目
- setAudioAttributes(AudioAttributes attributes)方法:设置音频播放器的属性
- setAudioSessionId(int sessionId)方法:设置音频播放器的SessionId
- setAudioStreamType(int streamtype)方法:设置Mediaplayer的音频流类型
- setAuxEffectSendLevel(float level)方法:设置播放器的第二电平附加作用
- setDataSource(String path)方法:设置多媒体资源位置,重载方法有:setDataSource(Context context, Uri uri, Map
音频播放
使用Mediaplayer实现音频播放有几个步骤:
创建Mediaplayer对象,这有几种方法,一种是直接new出来,另外一种是通过调用create方法,需要注意的是:直接new出来需要调用prepare方法,建议使用prepareAsync方法完成准备;调用create方法就不能调用prepare方法,否则会出现状态异常
通过setDataSource()方法设置音频文件的路径,当然这里只是很简单的,实际开发中会采取其他方法
3.调用start方法开始播放音频
下面我们通过一个小例子实现音频播放
首先是布局文件代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
x