package wb.android.camera; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Window; import android.view.WindowManager; import android.widget.Toast; public abstract class CameraActivity extends Activity { //logging variables private static final boolean D = true; private static final String TAG = "CameraActivity"; //instance variables private CameraController _cameraCont; private CameraPreview _preview; private CaptureHandler _captureHandler; @Override protected void onCreate(final Bundle savedInstanceState) { if(D) Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); // Hide the window title. requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); // Build a camera controller and a camera preview _captureHandler = new CaptureHandler(this); _cameraCont = new CameraController(_captureHandler); _preview = new CameraPreview(this); } /** * Allow for a user to use a custom preview * @param savedInstanceState * @param customPreview */ public final void onCreate(final Bundle savedInstanceState, final CameraPreview customPreview) { if(D) Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); // Hide the window title. requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); // Build a camera controller and a camera preview _captureHandler = new CaptureHandler(this); _cameraCont = new CameraController(_captureHandler); _preview = customPreview; } @Override protected void onResume() { if(D) Log.d(TAG, "onResume"); super.onResume(); this.restartCameraService(); } protected void restartCameraService() { System.gc(); //Garage Collect this.setContentView(_preview); try { _cameraCont.startCamera(_preview); //Opens the default (rear-facing) camera } catch (RuntimeException e) { Toast.makeText(this, "Error: Another application is currently controlling the camera", Toast.LENGTH_SHORT).show(); finish(); } this.postReviewCallback(_cameraCont); } @Override protected void onPause() { if(D) Log.d(TAG, "onPause"); super.onPause(); // Because the Camera object is a shared resource, be sure to release it when the activity is paused _cameraCont.stopCamera(); } public abstract void postReviewCallback(CameraController controller); public abstract void autoFocusSuccessCallback(); public abstract void autoFocusFailureCallback(); public abstract void pictureTakenCallback(byte[] jpg); }