From 1b8fbe60cc7078497dc28b854a40de95fecaad42 Mon Sep 17 00:00:00 2001 From: roxma Date: Sat, 8 Oct 2016 21:43:38 +0800 Subject: [PATCH] Create new MediaPlayer everytime when need a beep. For fixing issue #155 --- .../zxing/client/android/BeepManager.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/zxing-android-embedded/src/com/google/zxing/client/android/BeepManager.java b/zxing-android-embedded/src/com/google/zxing/client/android/BeepManager.java index f5fec0d6b..d72cb037a 100644 --- a/zxing-android-embedded/src/com/google/zxing/client/android/BeepManager.java +++ b/zxing-android-embedded/src/com/google/zxing/client/android/BeepManager.java @@ -39,7 +39,6 @@ public final class BeepManager implements private static final long VIBRATE_DURATION = 200L; private final Activity activity; - private MediaPlayer mediaPlayer; private boolean playBeep; private boolean beepEnabled = true; @@ -47,7 +46,6 @@ public final class BeepManager implements public BeepManager(Activity activity) { this.activity = activity; - this.mediaPlayer = null; updatePrefs(); } @@ -81,17 +79,16 @@ public void setVibrateEnabled(boolean vibrateEnabled) { public synchronized void updatePrefs() { playBeep = shouldBeep(beepEnabled, activity); - if (playBeep && mediaPlayer == null) { + if (playBeep) { // The volume on STREAM_SYSTEM is not adjustable, and users found it too loud, // so we now play on the music stream. activity.setVolumeControlStream(AudioManager.STREAM_MUSIC); - mediaPlayer = buildMediaPlayer(activity); } } public synchronized void playBeepSoundAndVibrate() { - if (playBeep && mediaPlayer != null) { - mediaPlayer.start(); + if (playBeep) { + buildMediaPlayer(activity).start(); } if (vibrateEnabled) { Vibrator vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE); @@ -136,7 +133,8 @@ private MediaPlayer buildMediaPlayer(Context activity) { @Override public void onCompletion(MediaPlayer mp) { // When the beep has finished playing, rewind to queue up another one. - mp.seekTo(0); + mp.stop(); + mp.release(); } @Override @@ -147,7 +145,6 @@ public synchronized boolean onError(MediaPlayer mp, int what, int extra) { } else { // possibly media player error, so release and recreate mp.release(); - mediaPlayer = null; updatePrefs(); } return true; @@ -155,9 +152,5 @@ public synchronized boolean onError(MediaPlayer mp, int what, int extra) { @Override public synchronized void close() { - if (mediaPlayer != null) { - mediaPlayer.release(); - mediaPlayer = null; - } } }