UISoundHelper.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. package com.bgy.autosale.helpers;
  2. import android.media.MediaPlayer;
  3. import android.os.Handler;
  4. import android.os.Message;
  5. import android.text.TextUtils;
  6. import android.util.SparseArray;
  7. import com.bgy.autosale.App;
  8. import com.bgy.autosale.Constant;
  9. import com.hboxs.base_library.constant.Global;
  10. import com.hboxs.base_library.constant.Name;
  11. import com.orhanobut.hawk.Hawk;
  12. import java.io.File;
  13. import java.io.IOException;
  14. import java.math.BigDecimal;
  15. import java.math.RoundingMode;
  16. import java.util.concurrent.TimeUnit;
  17. import io.reactivex.android.schedulers.AndroidSchedulers;
  18. import io.reactivex.disposables.Disposable;
  19. /**
  20. * Created by cjx on 2021-01-20
  21. * 说明:
  22. */
  23. public class UISoundHelper implements Handler.Callback, MediaPlayer.OnPreparedListener {
  24. final int SCENE_GUIDE_1 = 1; // 揽客1
  25. final int SCENE_GUIDE_2 = 2; // 揽客2
  26. final int SCENE_SELECT_FLAVOR_4 = 4; // 选择口味
  27. final int SCENE_SELECT_FLAVOR_5 = 5; // 选择口味
  28. final int SCENE_PAY_BC = 13; // 付款
  29. final int SCENE_PAY_CB = 14; // 付款
  30. final int SCENE_MAKE_FINISH = 15; // 制作完成,请取餐
  31. final int SCENE_TAKE_FINISH = 16; // 订单结束
  32. final int SCENE_CLEAN = 17; // 清洗
  33. final int SCENE_ROBOT_ENTER = 18; // 机器人进场
  34. final int SCENE_PAY_POS = 19; // 付款
  35. final int SCENE_START_MAKE = 20; // 付款
  36. private MediaPlayer voiceMediaPlayer;
  37. private MediaPlayer videoMediaPlayer;
  38. private static UISoundHelper helper;
  39. private boolean isVisible = true;
  40. private Disposable playDelayDisposable;
  41. private SparseArray<String> sceneVoices;
  42. private Handler handler;
  43. private String bgVoicePath = null;
  44. private MediaPlayer.OnCompletionListener bgVoiceCompleteListener = new MediaPlayer.OnCompletionListener() {
  45. @Override
  46. public void onCompletion(MediaPlayer mp) {
  47. if (!isVisible) {
  48. return;
  49. }
  50. playDelayDisposable = AndroidSchedulers.mainThread().scheduleDirect(new Runnable() {
  51. @Override
  52. public void run() {
  53. voiceMediaPlayer.start();
  54. }
  55. }, 3, TimeUnit.SECONDS);
  56. }
  57. };
  58. private MediaPlayer.OnCompletionListener guideVoiceCompleteListener = new MediaPlayer.OnCompletionListener() {
  59. @Override
  60. public void onCompletion(MediaPlayer mp) {
  61. if (!isVisible) {
  62. return;
  63. }
  64. playDelayDisposable = AndroidSchedulers.mainThread().scheduleDirect(new Runnable() {
  65. @Override
  66. public void run() {
  67. if (videoMediaPlayer != null) {
  68. setVolume(videoMediaPlayer, 0.5f, 0.5f);
  69. } else {
  70. playBgVoice();
  71. }
  72. }
  73. }, 1, TimeUnit.SECONDS);
  74. }
  75. };
  76. public static UISoundHelper getInstance() {
  77. if (helper == null) {
  78. synchronized (UISoundHelper.class) {
  79. if (helper == null) {
  80. helper = new UISoundHelper();
  81. }
  82. }
  83. }
  84. return helper;
  85. }
  86. private UISoundHelper() {
  87. handler = new Handler(this);
  88. sceneVoices = new SparseArray<>();
  89. if (Constant.LANGUAGE_ZH.equals(App.app.language)) {
  90. sceneVoices.put(SCENE_GUIDE_1, Constant.DIR_VOICE + "/scene_guide_1.mp3");
  91. sceneVoices.put(SCENE_GUIDE_2, Constant.DIR_VOICE + "/scene_guide_2.mp3");
  92. sceneVoices.put(SCENE_SELECT_FLAVOR_4, Constant.DIR_VOICE + "/scene_select_1.mp3");
  93. sceneVoices.put(SCENE_SELECT_FLAVOR_5, Constant.DIR_VOICE + "/scene_select_2.mp3");
  94. sceneVoices.put(SCENE_PAY_BC, Constant.DIR_VOICE + "/scene_pay_bc.mp3");
  95. sceneVoices.put(SCENE_PAY_CB, Constant.DIR_VOICE + "/scene_pay_cb.mp3");
  96. sceneVoices.put(SCENE_MAKE_FINISH, Constant.DIR_VOICE + "/scene_make_finish.mp3");
  97. sceneVoices.put(SCENE_TAKE_FINISH, Constant.DIR_VOICE + "/scene_take_finish.mp3");
  98. } else if (!Constant.LANGUAGE_EN.equals(App.app.language)) {
  99. sceneVoices.put(SCENE_GUIDE_1, Constant.DIR_VOICE_EN + "/scene_guide_1.mp3");
  100. sceneVoices.put(SCENE_GUIDE_2, Constant.DIR_VOICE_EN + "/scene_guide_2.mp3");
  101. sceneVoices.put(SCENE_SELECT_FLAVOR_4, Constant.DIR_VOICE_EN + "/scene_select_1.mp3");
  102. sceneVoices.put(SCENE_SELECT_FLAVOR_5, Constant.DIR_VOICE_EN + "/scene_select_2.mp3");
  103. sceneVoices.put(SCENE_PAY_POS, Constant.DIR_VOICE_EN + "/scene_pay_pos.mp3");
  104. sceneVoices.put(SCENE_START_MAKE, Constant.DIR_VOICE_EN + "/scene_start_make.mp3");
  105. sceneVoices.put(SCENE_MAKE_FINISH, Constant.DIR_VOICE_EN + "/scene_make_finish.mp3");
  106. sceneVoices.put(SCENE_TAKE_FINISH, Constant.DIR_VOICE_EN + "/scene_take_finish.mp3");
  107. } else {
  108. }
  109. sceneVoices.put(SCENE_CLEAN, Constant.DIR_VOICE + "/scene_clean_close.mp3");
  110. sceneVoices.put(SCENE_ROBOT_ENTER, Constant.DIR_VOICE + "/scene_robot_enter.mp3");
  111. voiceMediaPlayer = new MediaPlayer();
  112. voiceMediaPlayer.setOnPreparedListener(this);
  113. }
  114. @Override
  115. public void onPrepared(MediaPlayer mp) {
  116. voiceMediaPlayer.start();
  117. }
  118. @Override
  119. public boolean handleMessage(Message msg) {
  120. switch (msg.what) {
  121. case SCENE_CLEAN:
  122. playClean(true);
  123. break;
  124. case SCENE_SELECT_FLAVOR_4:
  125. play(SCENE_SELECT_FLAVOR_4);
  126. break;
  127. case SCENE_PAY_CB:
  128. playOrderPay(false, true);
  129. break;
  130. case SCENE_PAY_BC:
  131. playOrderPay(true, true);
  132. break;
  133. }
  134. return false;
  135. }
  136. public void setBgVoicePath(String path) {
  137. this.bgVoicePath = path;
  138. }
  139. public void setVideoMediaPlayer(MediaPlayer mp) {
  140. videoMediaPlayer = mp;
  141. setVolume(videoMediaPlayer, 0.5f, 0.5f);
  142. }
  143. public void resetVideoMediaPlayerVolume() {
  144. try {
  145. if (videoMediaPlayer != null) {
  146. setVolume(videoMediaPlayer, 0.5f, 0.5f);
  147. }
  148. } catch (Exception e) {
  149. e.printStackTrace();
  150. }
  151. }
  152. public void playBgVoice() {
  153. playVoice(bgVoicePath, true);
  154. }
  155. public void playVoice(String path, boolean isBgVoice) {
  156. if (playDelayDisposable != null) {
  157. playDelayDisposable.dispose();
  158. }
  159. if (TextUtils.isEmpty(path)) {
  160. return;
  161. }
  162. File f = new File(path);
  163. if (!f.exists()) {
  164. return;
  165. }
  166. voiceMediaPlayer.reset();
  167. if (isBgVoice) {
  168. setVolume(voiceMediaPlayer, 0.5f, 0.5f);
  169. voiceMediaPlayer.setOnCompletionListener(bgVoiceCompleteListener);
  170. } else {
  171. if (isVisible) {
  172. // 关闭视频的声音
  173. if (videoMediaPlayer != null) {
  174. setVolume(videoMediaPlayer, 0f, 0f);
  175. }
  176. voiceMediaPlayer.setOnCompletionListener(guideVoiceCompleteListener);
  177. } else {
  178. voiceMediaPlayer.setOnCompletionListener(null);
  179. }
  180. setVolume(voiceMediaPlayer, 1.0f, 1.0f);
  181. }
  182. try {
  183. voiceMediaPlayer.setDataSource(path);
  184. voiceMediaPlayer.prepareAsync();
  185. } catch (IOException e) {
  186. e.printStackTrace();
  187. }
  188. }
  189. public void setVisible(boolean visible) {
  190. this.isVisible = visible;
  191. if (playDelayDisposable != null) {
  192. playDelayDisposable.dispose();
  193. }
  194. if (!visible) {
  195. voiceMediaPlayer.pause();
  196. }
  197. }
  198. /**
  199. * 播放选中口味的语音
  200. */
  201. public void playSelectFlavor(boolean enable) {
  202. if (enable) {
  203. handler.sendEmptyMessageDelayed(SCENE_SELECT_FLAVOR_4, 10000);
  204. play(SCENE_SELECT_FLAVOR_4);
  205. } else {
  206. handler.removeMessages(SCENE_SELECT_FLAVOR_4);
  207. }
  208. }
  209. /**
  210. * 播放提示付款的语音
  211. *
  212. * @param scanGun 是否使用扫码枪收款
  213. */
  214. public void playOrderPay(boolean scanGun, boolean enable) {
  215. int scene;
  216. if (App.app.payChannel == Constant.PAY_POS_DEVICE) {
  217. scene = SCENE_PAY_POS;
  218. } else {
  219. scene = scanGun ? SCENE_PAY_BC : SCENE_PAY_CB;
  220. }
  221. if (enable) {
  222. play(scene);
  223. handler.sendEmptyMessageDelayed(scene, 10000);
  224. } else {
  225. handler.removeMessages(scene);
  226. }
  227. }
  228. public void playOrderMake() {
  229. play(SCENE_START_MAKE);
  230. }
  231. /**
  232. * 播放取餐提示
  233. */
  234. public void playOrderTake() {
  235. play(SCENE_MAKE_FINISH);
  236. }
  237. /**
  238. * 播放订单完成提示
  239. */
  240. public void playOrderFinish() {
  241. play(SCENE_TAKE_FINISH);
  242. if (Hawk.get(Name.VALUE_ZERO,false)){
  243. Global.hasmoney = new BigDecimal("0").setScale(2, RoundingMode.HALF_UP);
  244. Global.hascoin = new BigDecimal("0").setScale(2, RoundingMode.HALF_UP);
  245. }
  246. }
  247. public void playRadarGuide(boolean isJump) {
  248. UISoundHelper.getInstance().play(isJump ? SCENE_GUIDE_1 : SCENE_GUIDE_2);
  249. }
  250. public void playGuideEnter() {
  251. play(SCENE_ROBOT_ENTER);
  252. }
  253. public void playClean(boolean enable) {
  254. if (!enable) {
  255. handler.removeMessages(SCENE_CLEAN);
  256. } else {
  257. play(SCENE_CLEAN);
  258. handler.sendEmptyMessageDelayed(SCENE_CLEAN, 8000);
  259. }
  260. }
  261. private void play(int scene) {
  262. if (Hawk.get(Name.VOICE_MEAL_PICKUP_PROMPTS,true)) {
  263. playVoice(sceneVoices.get(scene), false);
  264. }
  265. }
  266. private void setVolume(MediaPlayer mediaPlayer, float left, float right) {
  267. try {
  268. mediaPlayer.setVolume(left, right);
  269. } catch (Exception e) {
  270. e.printStackTrace();
  271. }
  272. }
  273. }