Android MediaPlayer控制进度播放音频
本文简单介绍MediaPlayer获取播放进度和设置进度播放。
1、获取音频文件的播放时间总长度
//返回的是int的毫秒级数据
/**
* Gets the duration of the file.
*
* @return the duration in milliseconds, if no duration is available
* (for example, if streaming live content), -1 is returned.
*/
public int getDuration();
2、获取音频文件的播放时间当前时间值
//返回的是int的毫秒级数据
/**
* Gets the current playback position.
*
* @return the current position in milliseconds
*/
public int getCurrentPosition();
3、设置进度播放音频
//设置之前的毫秒数
seekTo(int msec)
//设置之前的毫秒数和播放模式
seekTo(long msec,int mode)
mode的值有如下选择:
public static final int SEEK_PREVIOUS_SYNC = 0x00; //同步播放模式,会往前一点播放,默认模式
public static final int SEEK_NEXT_SYNC = 0x01; //同步播放模式,会后一点播放
public static final int SEEK_CLOSEST_SYNC = 0x02; //同步播放模式,精确播放
public static final int SEEK_CLOSEST = 0x03; //异步播放模式,精确播放
关于SeekTo要注意的地方:
1、首次播放在线音频要在onPrepared回调中执行seekTo
mOnlineMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (mOnlineMediaPlayer != null) {
mp.seekTo(30 * 1000, MediaPlayer.SEEK_CLOSEST); // 30秒的位置播放
mp.start();
}
}
});
2、如果是暂停状态,再调seekTo,可以直接调
public void resumeOnlineMedia() {
if (mOnlineMediaPlayer != null) {
try {
if (!mOnlineMediaPlayer.isPlaying()) {
mOnlineMediaPlayer.seekTo(30 * 1000, MediaPlayer.SEEK_CLOSEST);
mOnlineMediaPlayer.start();
}
} catch (IllegalStateException e) {
Log.e(TAG, "resumeOnlineMedia error=" + e.getMessage());
}
}
}