本文主要是介绍简单易用的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() {@Overridepublic void run() {//更新播放进度if (null != mMediaPlayer) {currentPosition = mMediaPlayer.getCurrentPosition() / 1000;mMediaPlayerCallBack.mediaPlayCallBack(mHolder, MediaPlayCallBack.STATE_START, totalDuration, currentPosition);}}},0,50);mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic 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() {@Overridepublic void run() {//更新播放进度if (null != mMediaPlayer) {currentPosition = mMediaPlayer.getCurrentPosition() / 1000;mMediaPlayerCallBack.mediaPlayCallBack(mHolder, MediaPlayCallBack.STATE_CONTINUE, totalDuration, currentPosition);}}},0,1000);mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic 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() {@Overridepublic void run() {//更新播放进度if (null != mMediaPlayer) {currentPosition = mMediaPlayer.getCurrentPosition() / 1000;mMediaPlayerCallBack.mediaPlayCallBack(mHolder, MediaPlayCallBack.STATE_START, totalDuration, currentPosition);}}},0,50);mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic 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);
}
这篇关于简单易用的MediaPlayer音频播放器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!