From b8d8f9b855fdd453d06d78d2565f091db208ec8e Mon Sep 17 00:00:00 2001 From: lmw <125975490@qq.com> Date: 星期二, 26 十一月 2024 19:30:59 +0800 Subject: [PATCH] 支付 --- app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 101 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java b/app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java index 53ed751..bfaf969 100644 --- a/app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java +++ b/app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java @@ -27,6 +27,10 @@ private float volume = 0.5f; //播放音量 + private String audio = "";//音源 + + private boolean isPause = false; //是否暂停,解决循环播放时资源文件prepare异步产生的暂停失败问题 + /** * 文件存储默认sdcard/record */ @@ -204,17 +208,69 @@ public void onStartPlay(); public void onFinishPlay(); + + public void onGetDuration(int duration); } - //开始播放录音 + + /** + * 开始播放音频 + * @param context + * @param filePath + */ public void startPlayMusic(Context context, String filePath) { if (mMediaPlayer != null) { - stopPlayMusic(); + stopPlayMusic(false); } mMediaPlayer = new MediaPlayer(); mMediaPlayer.setVolume(volume,volume); + isPause = false; try { - Log.e("mmp", "path:" + filePath); + Log.e("mmp", "开始播放 path:" + filePath); + mMediaPlayer.setDataSource(context, Uri.parse(filePath)); + mMediaPlayer.prepareAsync(); + mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + // 装载完毕回调 + mMediaPlayer.start(); + if (audioStatusUpdateListener != null){ + audioStatusUpdateListener.onGetDuration(mMediaPlayer.getDuration()); + audioStatusUpdateListener.onStartPlay(); + } + } + + + }); + mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopPlayMusic(true); +// BaseEvent baseEvent = new BaseEvent(BaseEvent.SEND_AODIO_PLAY_OVER); +// baseEvent.setMsg(filePath); +// EventBus.getDefault().post(baseEvent); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + /** + * 循环播放音频 + * @param context + * @param filePath + */ + public void loopPlayMusic(Context context, String filePath) { + if (mMediaPlayer != null) { + stopPlayMusic(false); + } + mMediaPlayer = new MediaPlayer(); + mMediaPlayer.setVolume(volume,volume); + isPause = false; + try { + Log.e("mmp", "循环播放 path:" + filePath); mMediaPlayer.setDataSource(context, Uri.parse(filePath)); mMediaPlayer.prepareAsync(); mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @@ -229,15 +285,37 @@ mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { - stopPlayMusic(); -// BaseEvent baseEvent = new BaseEvent(BaseEvent.SEND_AODIO_PLAY_OVER); -// baseEvent.setMsg(filePath); -// EventBus.getDefault().post(baseEvent); +// Log.e("mmp", "播放完成 从新循环 path:" + filePath); + mMediaPlayer.start(); + if (isPause){ +// Log.e("mmp", "循环播放异步暂停"); + mMediaPlayer.pause(); + } } }); } catch (Exception e) { e.printStackTrace(); + } + } + + public void pause(){ + if (mMediaPlayer != null) { + mMediaPlayer.pause(); + isPause = true; + } + } + + public void resume(){ + if (mMediaPlayer != null) { + mMediaPlayer.start(); + isPause = false; + } + } + + public void seekTo(int now){ + if (mMediaPlayer != null) { + mMediaPlayer.seekTo(now*1000); } } @@ -248,16 +326,27 @@ } } - //结束录音播放 - public void stopPlayMusic() { + public int getCurrentPosition(){ + if (mMediaPlayer!=null){ + return mMediaPlayer.getCurrentPosition(); + } + return 0; + } + + + /** + * 结束录音播放 + * @param needCallback true真实结束 才走结束回调,为了切换下一首而结束的 不调结束回调 + */ + public void stopPlayMusic(boolean needCallback) { if (mMediaPlayer == null) return; try { mMediaPlayer.stop(); mMediaPlayer.release(); - if (audioStatusUpdateListener != null) - audioStatusUpdateListener.onFinishPlay(); mMediaPlayer = null; + if (audioStatusUpdateListener != null&&needCallback) + audioStatusUpdateListener.onFinishPlay(); } catch (IllegalStateException e) { e.printStackTrace(); } @@ -272,7 +361,7 @@ */ public int getMusicTime(Context context, String filePath) { if (mMediaPlayer != null) { - stopPlayMusic(); + stopPlayMusic(false); } mMediaPlayer = new MediaPlayer(); try { -- Gitblit v1.7.1