mirror of
https://github.com/zxing/zxing.git
synced 2025-03-05 20:48:51 -08:00
Issue 1680 Finish / clean up media player in rare case the media server dies
git-svn-id: https://zxing.googlecode.com/svn/trunk@2799 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
parent
20490f1bda
commit
c608a08978
|
@ -31,7 +31,7 @@ import java.io.IOException;
|
||||||
/**
|
/**
|
||||||
* Manages beeps and vibrations for {@link CaptureActivity}.
|
* Manages beeps and vibrations for {@link CaptureActivity}.
|
||||||
*/
|
*/
|
||||||
final class BeepManager {
|
final class BeepManager implements MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener {
|
||||||
|
|
||||||
private static final String TAG = BeepManager.class.getSimpleName();
|
private static final String TAG = BeepManager.class.getSimpleName();
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ final class BeepManager {
|
||||||
updatePrefs();
|
updatePrefs();
|
||||||
}
|
}
|
||||||
|
|
||||||
void updatePrefs() {
|
synchronized void updatePrefs() {
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
|
||||||
playBeep = shouldBeep(prefs, activity);
|
playBeep = shouldBeep(prefs, activity);
|
||||||
vibrate = prefs.getBoolean(PreferencesActivity.KEY_VIBRATE, false);
|
vibrate = prefs.getBoolean(PreferencesActivity.KEY_VIBRATE, false);
|
||||||
|
@ -61,7 +61,7 @@ final class BeepManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void playBeepSoundAndVibrate() {
|
synchronized void playBeepSoundAndVibrate() {
|
||||||
if (playBeep && mediaPlayer != null) {
|
if (playBeep && mediaPlayer != null) {
|
||||||
mediaPlayer.start();
|
mediaPlayer.start();
|
||||||
}
|
}
|
||||||
|
@ -83,16 +83,11 @@ final class BeepManager {
|
||||||
return shouldPlayBeep;
|
return shouldPlayBeep;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static MediaPlayer buildMediaPlayer(Context activity) {
|
private MediaPlayer buildMediaPlayer(Context activity) {
|
||||||
MediaPlayer mediaPlayer = new MediaPlayer();
|
MediaPlayer mediaPlayer = new MediaPlayer();
|
||||||
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
||||||
// When the beep has finished playing, rewind to queue up another one.
|
mediaPlayer.setOnCompletionListener(this);
|
||||||
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
|
mediaPlayer.setOnErrorListener(this);
|
||||||
@Override
|
|
||||||
public void onCompletion(MediaPlayer player) {
|
|
||||||
player.seekTo(0);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
AssetFileDescriptor file = activity.getResources().openRawResourceFd(R.raw.beep);
|
AssetFileDescriptor file = activity.getResources().openRawResourceFd(R.raw.beep);
|
||||||
try {
|
try {
|
||||||
|
@ -107,4 +102,24 @@ final class BeepManager {
|
||||||
return mediaPlayer;
|
return mediaPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCompletion(MediaPlayer mp) {
|
||||||
|
// When the beep has finished playing, rewind to queue up another one.
|
||||||
|
mp.seekTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized boolean onError(MediaPlayer mp, int what, int extra) {
|
||||||
|
if (what == MediaPlayer.MEDIA_ERROR_SERVER_DIED) {
|
||||||
|
// we are finished, so put up an appropriate error toast if required and finish
|
||||||
|
activity.finish();
|
||||||
|
} else {
|
||||||
|
// possibly media player error, so release and recreate
|
||||||
|
mp.release();
|
||||||
|
mediaPlayer = null;
|
||||||
|
updatePrefs();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue