diff --git a/android/src/com/google/zxing/client/android/camera/open/OpenCameraInterface.java b/android/src/com/google/zxing/client/android/camera/open/OpenCameraInterface.java index 3285abcb8..f6d33acfe 100644 --- a/android/src/com/google/zxing/client/android/camera/open/OpenCameraInterface.java +++ b/android/src/com/google/zxing/client/android/camera/open/OpenCameraInterface.java @@ -30,29 +30,46 @@ public final class OpenCameraInterface { /** * Opens the requested camera with {@link Camera#open(int)}, if one exists. * - * @param cameraId camera ID of the camera to use + * @param cameraId camera ID of the camera to use. A negative value means "no preference" * @return handle to {@link Camera} that was opened */ public static Camera open(int cameraId) { - if (cameraId < 0) { - Log.w(TAG, "Requested invalid camera ID: " + cameraId); - return null; - } - + int numCameras = Camera.getNumberOfCameras(); - if (numCameras == 0) { Log.w(TAG, "No cameras!"); return null; } - + + boolean explicitRequest = cameraId >= 0; + + if (!explicitRequest) { + // Select a camera if no explicit camera requested + int index = 0; + while (index < numCameras) { + Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); + Camera.getCameraInfo(index, cameraInfo); + if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) { + break; + } + index++; + } + + cameraId = index; + } + Camera camera; if (cameraId < numCameras) { Log.i(TAG, "Opening camera #" + cameraId); camera = Camera.open(cameraId); } else { - Log.w(TAG, "Requested camera does not exist: " + cameraId); - camera = null; + if (explicitRequest) { + Log.w(TAG, "Requested camera does not exist: " + cameraId); + camera = null; + } else { + Log.i(TAG, "No camera facing back; returning camera #0"); + camera = Camera.open(0); + } } return camera; @@ -65,33 +82,7 @@ public final class OpenCameraInterface { * @return handle to {@link Camera} that was opened */ public static Camera open() { - - int numCameras = Camera.getNumberOfCameras(); - if (numCameras == 0) { - Log.w(TAG, "No cameras!"); - return null; - } - - int index = 0; - while (index < numCameras) { - Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); - Camera.getCameraInfo(index, cameraInfo); - if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) { - break; - } - index++; - } - - Camera camera; - if (index < numCameras) { - Log.i(TAG, "Opening camera #" + index); - camera = Camera.open(index); - } else { - Log.i(TAG, "No camera facing back; returning camera #0"); - camera = Camera.open(0); - } - - return camera; + return open(-1); } }