Ensure beep MediaPlayer is released

This commit is contained in:
Sean Owen 2014-04-23 12:47:18 +01:00
parent 4050f5c2f3
commit e130eac0ea
2 changed files with 21 additions and 7 deletions

View file

@ -26,12 +26,14 @@ import android.os.Vibrator;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import java.io.Closeable;
import java.io.IOException; import java.io.IOException;
/** /**
* Manages beeps and vibrations for {@link CaptureActivity}. * Manages beeps and vibrations for {@link CaptureActivity}.
*/ */
final class BeepManager implements MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener { final class BeepManager implements
MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener, Closeable {
private static final String TAG = BeepManager.class.getSimpleName(); private static final String TAG = BeepManager.class.getSimpleName();
@ -88,18 +90,21 @@ final class BeepManager implements MediaPlayer.OnCompletionListener, MediaPlayer
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnCompletionListener(this); mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnErrorListener(this); mediaPlayer.setOnErrorListener(this);
try {
AssetFileDescriptor file = activity.getResources().openRawResourceFd(R.raw.beep); AssetFileDescriptor file = activity.getResources().openRawResourceFd(R.raw.beep);
try { try {
mediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength()); mediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength());
} finally {
file.close(); file.close();
}
mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME); mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);
mediaPlayer.prepare(); mediaPlayer.prepare();
return mediaPlayer;
} catch (IOException ioe) { } catch (IOException ioe) {
Log.w(TAG, ioe); Log.w(TAG, ioe);
mediaPlayer = null; mediaPlayer.release();
return null;
} }
return mediaPlayer;
} }
@Override @Override
@ -122,4 +127,12 @@ final class BeepManager implements MediaPlayer.OnCompletionListener, MediaPlayer
return true; return true;
} }
@Override
public synchronized void close() {
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
} }

View file

@ -283,6 +283,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
} }
inactivityTimer.onPause(); inactivityTimer.onPause();
ambientLightManager.stop(); ambientLightManager.stop();
beepManager.close();
cameraManager.closeDriver(); cameraManager.closeDriver();
if (!hasSurface) { if (!hasSurface) {
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view); SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);