我正在编写一个相机应用程序,每当我调用camera.open()时该应用程序崩溃,然后出现此错误:
W/CameraBase﹕ An error occurred while connecting to camera: 0
这是我打开相机的方法:
public void getCameraInstance(){ mCamera = null; try { mCamera = Camera.open(); // attempt to get a Camera instance } catch (Exception e) { // Camera is not available (in use or does not exist) } }
更新:
如果您正在阅读本文,请注意,这是针对原始相机API的,不再应用最新版本的相机API(camera2)。
从那时起,您应该使用camera2 api,因为它具有更好的功能并且还具有更好的图像处理管道。
注意仅在不包括API 21(Lolipop)时有效,即不适用于Lolipop及更高版本。
使用以下方法
android.hardware.Camera.open(int cameraId)
您应该传递cameraId,如果您想要前置摄像头ID,则可以使用以下方法
private int findFrontFacingCamera() { // Search for the front facing camera int numberOfCameras = Camera.getNumberOfCameras(); for (int i = 0; i < numberOfCameras; i++) { CameraInfo info = new CameraInfo(); Camera.getCameraInfo(i, info); if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { cameraId = i; cameraFront = true; break; } } return cameraId; }
如果其他应用程序打开了同一台摄像机,则会抛出RuntimeException。
使用完相机后,您必须调用release(),否则它将保持锁定状态,并且无法用于其他应用程序。
对于特定的硬件摄像机,您的应用程序一次只能激活一个Camera对象。