Android MediaPlayer控制进度播放音频

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());
            }
        }
    }


共勉:2020元旦快乐。

发布了365 篇原创文章 · 获赞 1587 · 访问量 160万+

猜你喜欢

转载自blog.csdn.net/wenzhi20102321/article/details/103787884