package com.bgy.autosale.helpers; import android.media.MediaPlayer; import android.os.Handler; import android.os.Message; import android.text.TextUtils; import android.util.SparseArray; import com.bgy.autosale.App; import com.bgy.autosale.Constant; import com.hboxs.base_library.constant.Global; import com.hboxs.base_library.constant.Name; import com.orhanobut.hawk.Hawk; import java.io.File; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.concurrent.TimeUnit; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; /** * Created by cjx on 2021-01-20 * 说明: */ public class UISoundHelper implements Handler.Callback, MediaPlayer.OnPreparedListener { final int SCENE_GUIDE_1 = 1; // 揽客1 final int SCENE_GUIDE_2 = 2; // 揽客2 final int SCENE_SELECT_FLAVOR_4 = 4; // 选择口味 final int SCENE_SELECT_FLAVOR_5 = 5; // 选择口味 final int SCENE_PAY_BC = 13; // 付款 final int SCENE_PAY_CB = 14; // 付款 final int SCENE_MAKE_FINISH = 15; // 制作完成,请取餐 final int SCENE_TAKE_FINISH = 16; // 订单结束 final int SCENE_CLEAN = 17; // 清洗 final int SCENE_ROBOT_ENTER = 18; // 机器人进场 final int SCENE_PAY_POS = 19; // 付款 final int SCENE_START_MAKE = 20; // 付款 private MediaPlayer voiceMediaPlayer; private MediaPlayer videoMediaPlayer; private static UISoundHelper helper; private boolean isVisible = true; private Disposable playDelayDisposable; private SparseArray sceneVoices; private Handler handler; private String bgVoicePath = null; private MediaPlayer.OnCompletionListener bgVoiceCompleteListener = new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { if (!isVisible) { return; } playDelayDisposable = AndroidSchedulers.mainThread().scheduleDirect(new Runnable() { @Override public void run() { voiceMediaPlayer.start(); } }, 3, TimeUnit.SECONDS); } }; private MediaPlayer.OnCompletionListener guideVoiceCompleteListener = new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { if (!isVisible) { return; } playDelayDisposable = AndroidSchedulers.mainThread().scheduleDirect(new Runnable() { @Override public void run() { if (videoMediaPlayer != null) { setVolume(videoMediaPlayer, 0.5f, 0.5f); } else { playBgVoice(); } } }, 1, TimeUnit.SECONDS); } }; public static UISoundHelper getInstance() { if (helper == null) { synchronized (UISoundHelper.class) { if (helper == null) { helper = new UISoundHelper(); } } } return helper; } private UISoundHelper() { handler = new Handler(this); sceneVoices = new SparseArray<>(); if (Constant.LANGUAGE_ZH.equals(App.app.language)) { sceneVoices.put(SCENE_GUIDE_1, Constant.DIR_VOICE + "/scene_guide_1.mp3"); sceneVoices.put(SCENE_GUIDE_2, Constant.DIR_VOICE + "/scene_guide_2.mp3"); sceneVoices.put(SCENE_SELECT_FLAVOR_4, Constant.DIR_VOICE + "/scene_select_1.mp3"); sceneVoices.put(SCENE_SELECT_FLAVOR_5, Constant.DIR_VOICE + "/scene_select_2.mp3"); sceneVoices.put(SCENE_PAY_BC, Constant.DIR_VOICE + "/scene_pay_bc.mp3"); sceneVoices.put(SCENE_PAY_CB, Constant.DIR_VOICE + "/scene_pay_cb.mp3"); sceneVoices.put(SCENE_MAKE_FINISH, Constant.DIR_VOICE + "/scene_make_finish.mp3"); sceneVoices.put(SCENE_TAKE_FINISH, Constant.DIR_VOICE + "/scene_take_finish.mp3"); } else if (!Constant.LANGUAGE_EN.equals(App.app.language)) { sceneVoices.put(SCENE_GUIDE_1, Constant.DIR_VOICE_EN + "/scene_guide_1.mp3"); sceneVoices.put(SCENE_GUIDE_2, Constant.DIR_VOICE_EN + "/scene_guide_2.mp3"); sceneVoices.put(SCENE_SELECT_FLAVOR_4, Constant.DIR_VOICE_EN + "/scene_select_1.mp3"); sceneVoices.put(SCENE_SELECT_FLAVOR_5, Constant.DIR_VOICE_EN + "/scene_select_2.mp3"); sceneVoices.put(SCENE_PAY_POS, Constant.DIR_VOICE_EN + "/scene_pay_pos.mp3"); sceneVoices.put(SCENE_START_MAKE, Constant.DIR_VOICE_EN + "/scene_start_make.mp3"); sceneVoices.put(SCENE_MAKE_FINISH, Constant.DIR_VOICE_EN + "/scene_make_finish.mp3"); sceneVoices.put(SCENE_TAKE_FINISH, Constant.DIR_VOICE_EN + "/scene_take_finish.mp3"); } else { } sceneVoices.put(SCENE_CLEAN, Constant.DIR_VOICE + "/scene_clean_close.mp3"); sceneVoices.put(SCENE_ROBOT_ENTER, Constant.DIR_VOICE + "/scene_robot_enter.mp3"); voiceMediaPlayer = new MediaPlayer(); voiceMediaPlayer.setOnPreparedListener(this); } @Override public void onPrepared(MediaPlayer mp) { voiceMediaPlayer.start(); } @Override public boolean handleMessage(Message msg) { switch (msg.what) { case SCENE_CLEAN: playClean(true); break; case SCENE_SELECT_FLAVOR_4: play(SCENE_SELECT_FLAVOR_4); break; case SCENE_PAY_CB: playOrderPay(false, true); break; case SCENE_PAY_BC: playOrderPay(true, true); break; } return false; } public void setBgVoicePath(String path) { this.bgVoicePath = path; } public void setVideoMediaPlayer(MediaPlayer mp) { videoMediaPlayer = mp; setVolume(videoMediaPlayer, 0.5f, 0.5f); } public void resetVideoMediaPlayerVolume() { try { if (videoMediaPlayer != null) { setVolume(videoMediaPlayer, 0.5f, 0.5f); } } catch (Exception e) { e.printStackTrace(); } } public void playBgVoice() { playVoice(bgVoicePath, true); } public void playVoice(String path, boolean isBgVoice) { if (playDelayDisposable != null) { playDelayDisposable.dispose(); } if (TextUtils.isEmpty(path)) { return; } File f = new File(path); if (!f.exists()) { return; } voiceMediaPlayer.reset(); if (isBgVoice) { setVolume(voiceMediaPlayer, 0.5f, 0.5f); voiceMediaPlayer.setOnCompletionListener(bgVoiceCompleteListener); } else { if (isVisible) { // 关闭视频的声音 if (videoMediaPlayer != null) { setVolume(videoMediaPlayer, 0f, 0f); } voiceMediaPlayer.setOnCompletionListener(guideVoiceCompleteListener); } else { voiceMediaPlayer.setOnCompletionListener(null); } setVolume(voiceMediaPlayer, 1.0f, 1.0f); } try { voiceMediaPlayer.setDataSource(path); voiceMediaPlayer.prepareAsync(); } catch (IOException e) { e.printStackTrace(); } } public void setVisible(boolean visible) { this.isVisible = visible; if (playDelayDisposable != null) { playDelayDisposable.dispose(); } if (!visible) { voiceMediaPlayer.pause(); } } /** * 播放选中口味的语音 */ public void playSelectFlavor(boolean enable) { if (enable) { handler.sendEmptyMessageDelayed(SCENE_SELECT_FLAVOR_4, 10000); play(SCENE_SELECT_FLAVOR_4); } else { handler.removeMessages(SCENE_SELECT_FLAVOR_4); } } /** * 播放提示付款的语音 * * @param scanGun 是否使用扫码枪收款 */ public void playOrderPay(boolean scanGun, boolean enable) { int scene; if (App.app.payChannel == Constant.PAY_POS_DEVICE) { scene = SCENE_PAY_POS; } else { scene = scanGun ? SCENE_PAY_BC : SCENE_PAY_CB; } if (enable) { play(scene); handler.sendEmptyMessageDelayed(scene, 10000); } else { handler.removeMessages(scene); } } public void playOrderMake() { play(SCENE_START_MAKE); } /** * 播放取餐提示 */ public void playOrderTake() { play(SCENE_MAKE_FINISH); } /** * 播放订单完成提示 */ public void playOrderFinish() { play(SCENE_TAKE_FINISH); if (Hawk.get(Name.VALUE_ZERO,false)){ Global.hasmoney = new BigDecimal("0").setScale(2, RoundingMode.HALF_UP); Global.hascoin = new BigDecimal("0").setScale(2, RoundingMode.HALF_UP); } } public void playRadarGuide(boolean isJump) { UISoundHelper.getInstance().play(isJump ? SCENE_GUIDE_1 : SCENE_GUIDE_2); } public void playGuideEnter() { play(SCENE_ROBOT_ENTER); } public void playClean(boolean enable) { if (!enable) { handler.removeMessages(SCENE_CLEAN); } else { play(SCENE_CLEAN); handler.sendEmptyMessageDelayed(SCENE_CLEAN, 8000); } } private void play(int scene) { if (Hawk.get(Name.VOICE_MEAL_PICKUP_PROMPTS,true)) { playVoice(sceneVoices.get(scene), false); } } private void setVolume(MediaPlayer mediaPlayer, float left, float right) { try { mediaPlayer.setVolume(left, right); } catch (Exception e) { e.printStackTrace(); } } }