for (int i = 0; i < numberOfCameras; ++i) {
Camera.getCameraInfo(i, cameraInfo);
if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) {
+ releaseCamera();
mCamera = Camera.open(i);
- mCamera.setPreviewTexture(surface);
mCameraOrientation = cameraInfo.orientation;
break;
}
}
+ } catch (RuntimeException e) {
+ Log.e(TAG, "Fail to open camera: " + e);
+ mCamera = null;
+ mScannerCallback.handleCameraFailure();
+ return false;
+ }
+
+ try {
if (mCamera == null) {
- Log.e(TAG, "Cannot find available back camera.");
- mScannerCallback.handleCameraFailure();
- return false;
+ throw new IOException("Cannot find available back camera");
}
+ mCamera.setPreviewTexture(surface);
setCameraParameter();
setTransformationMatrix();
if (!startPreview()) {
- Log.e(TAG, "Error to init Camera");
- mCamera = null;
- mScannerCallback.handleCameraFailure();
- return false;
+ throw new IOException("Lost contex");
}
- return true;
- } catch (IOException e) {
- Log.e(TAG, "Error to init Camera");
+ } catch (IOException ioe) {
+ Log.e(TAG, "Fail to startPreview camera: " + ioe);
mCamera = null;
mScannerCallback.handleCameraFailure();
return false;
}
+ return true;
+ }
+ }
+
+ private void releaseCamera() {
+ if (mCamera != null) {
+ mCamera.release();
+ mCamera = null;
}
}