简单易用的MediaPlayer音频播放器

为方便使用MediaPlayer播放音频,这里封装了一个类,使用的时候直接调用方法就可以了

public class MediaPlay {

    private static MediaPlayer mMediaPlayer = null;
    private static MediaPlayCallBack mMediaPlayerCallBack = null;
    private static Timer timer;//定时器

    private static int totalDuration;//音频总时长
    private static int currentPosition;//当前播放的进度
    private static DefectRecordingAdapter.RecordingHolder mHolder;

    private MediaPlay() {
        // 禁止被外部类实例化
    }

    //播放单个音频文件
    public static void startMedia(Context context, MediaPlayCallBack soundPlayCallBack, DefectRecordingAdapter.RecordingHolder holder,String path) {
        mMediaPlayerCallBack = soundPlayCallBack;
        mHolder = holder;
        stopMedia();
//        mMediaPlayer = MediaPlayer.create(context, audioId);//加载raw里的音频文件
        mMediaPlayer = MediaPlayer.create(context, Uri.parse(path));//加载音频连接
//        try {
//            mMediaPlayer.setDataSource(path);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
        mMediaPlayer.start();
        totalDuration = mMediaPlayer.getDuration() / 1000;//获取音乐总时长
        cancelTimer();
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                //更新播放进度
                if (null != mMediaPlayer) {
                    currentPosition = mMediaPlayer.getCurrentPosition() / 1000;
                    mMediaPlayerCallBack.mediaPlayCallBack(mHolder, MediaPlayCallBack.STATE_START, totalDuration, currentPosition);
                }
            }
        },0,50);
        mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                cancelTimer();
                if (null != mp) {
                    mp.stop();
                    mp.release();
                }
                mMediaPlayer = null;
                mMediaPlayerCallBack.mediaPlayCallBack(mHolder,MediaPlayCallBack.STATE_STOP,totalDuration,0);
            }
        });
    }

    //音频是否正在播放
    public static boolean isPlaying(){
        if (mMediaPlayer == null){
            return false;
        }
        return mMediaPlayer.isPlaying();
    }

    //暂停播放
    public static void pauseMedia() {
        cancelTimer();
        if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
            mMediaPlayer.pause();
            currentPosition = mMediaPlayer.getCurrentPosition() / 1000;
            mMediaPlayerCallBack.mediaPlayCallBack(mHolder,MediaPlayCallBack.STATE_PAUSE,totalDuration,currentPosition);
        }
    }

    //继续播放
    public static void continueMedia() {
        if (mMediaPlayer != null && !mMediaPlayer.isPlaying()) {
            mMediaPlayer.start();
            currentPosition = mMediaPlayer.getCurrentPosition() / 1000;
            mMediaPlayerCallBack.mediaPlayCallBack(mHolder,MediaPlayCallBack.STATE_CONTINUE,totalDuration,currentPosition);

            cancelTimer();
            timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    //更新播放进度
                    if (null != mMediaPlayer) {
                        currentPosition = mMediaPlayer.getCurrentPosition() / 1000;
                        mMediaPlayerCallBack.mediaPlayCallBack(mHolder, MediaPlayCallBack.STATE_CONTINUE, totalDuration, currentPosition);
                    }
                }
            },0,1000);
            mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    cancelTimer();
                    if (null != mp) {
                        mp.stop();
                        mp.release();
                    }
                    mMediaPlayer = null;
                    mMediaPlayerCallBack.mediaPlayCallBack(mHolder,MediaPlayCallBack.STATE_STOP,totalDuration,0);
                }
            });
        }
    }

    //停止播放
    public static void stopMedia() {
        cancelTimer();
        if (mMediaPlayer != null) {
            mMediaPlayer.stop();
            mMediaPlayer = null;
            mMediaPlayerCallBack.mediaPlayCallBack(mHolder,MediaPlayCallBack.STATE_STOP,totalDuration,0);
        }
    }

    // 直接拖动音频播放进度
    public static void seekToMedia(int progress,int playType){
        mMediaPlayer.seekTo(progress);
        currentPosition = mMediaPlayer.getCurrentPosition() / 1000;
        mMediaPlayerCallBack.mediaPlayCallBack(mHolder, playType, totalDuration, currentPosition);
    }

    // 先加载音频文件  再执行拖动进度播放
    public static void seekToMedia_load(Context context, MediaPlayCallBack soundPlayCallBack, DefectRecordingAdapter.RecordingHolder holder,String path,int progress){
        mMediaPlayerCallBack = soundPlayCallBack;
        mHolder = holder;
        mMediaPlayer = MediaPlayer.create(context, Uri.parse(path));
        totalDuration = mMediaPlayer.getDuration() / 1000;//获取音乐总时长
        mMediaPlayer.seekTo(progress*1000);
        mMediaPlayer.start();

        currentPosition = mMediaPlayer.getCurrentPosition() / 1000;
        mMediaPlayerCallBack.mediaPlayCallBack(mHolder, MediaPlayCallBack.STATE_START, totalDuration, currentPosition);
        cancelTimer();
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                //更新播放进度
                if (null != mMediaPlayer) {
                    currentPosition = mMediaPlayer.getCurrentPosition() / 1000;
                    mMediaPlayerCallBack.mediaPlayCallBack(mHolder, MediaPlayCallBack.STATE_START, totalDuration, currentPosition);
                }
            }
        },0,50);
        mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                cancelTimer();
                if (null != mp) {
                    mp.stop();
                    mp.release();
                }
                mMediaPlayer = null;
                mMediaPlayerCallBack.mediaPlayCallBack(mHolder,MediaPlayCallBack.STATE_STOP,totalDuration,0);
            }
        });
    }

    private static void cancelTimer(){
        if (null != timer){
            timer.cancel();
            timer.purge();
            timer = null;
        }
    }

里面用到的播放回调接口

/**
 * Created by WJY.
 * Date: 2020/12/17
 * Time: 18:43
 * Description: 音频播放回调
 */
public interface MediaPlayCallBack {

    public static final int STATE_START = 0; // 播放
    public static final int STATE_PAUSE = 1;// 暂停
    public static final int STATE_CONTINUE = 2;// 继续播放
    public static final int STATE_STOP = 3;// 停止

    /**
     * @param type     播放模式
     * @param totalDuration    音频总时长
     * @param currentPosition  当前播放的进度
     */
    public void mediaPlayCallBack(DefectRecordingAdapter.RecordingHolder holder, int type, int totalDuration, int currentPosition);
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代新人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值