W/CameraBase:连接到摄像机时出错:在camera.open()调用时出现0

Cje*_*en1 17 android android-camera android-activity

我正在写一个相机应用程序,每当我调用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)

    }
}
Run Code Online (Sandbox Code Playgroud)

更新:

如果您正在阅读本文,请注意这是原始相机API,不再适用最新版本的相机API(相机2).

从这一点开始,您应该使用camera2 api,因为它具有更强大的功能,并且还具有更好的图像处理流水线.

注意仅限于排除API 21(Lolipop),即不适用于Lolipop及以上.

小智 27

您手动将您的应用程序上传到手机.这就是相机许可未获批准的原因.您必须打开设置 - >应用程序(或类似的东西)并手动批准此权限.


Tim*_*mmm 11

在Android 6中,请确保您请求相机的权限.相机访问被视为"危险权限"之一.


mad*_*313 9

要使用以下方法

android.hardware.Camera.open(int cameraId)
Run Code Online (Sandbox Code Playgroud)

你应该通过cameraId,如果你想要前置摄像头,你可以使用以下方法

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;
}
Run Code Online (Sandbox Code Playgroud)
  1. 如果其他应用程序打开了同一个摄像头,则会抛出RuntimeException.

  2. 使用完相机后必须调用release(),否则它将保持锁定状态并且对其他应用程序不可用.

  3. 您的应用程序一次只能为一个特定的硬件摄像头激活一个Camera对象.


mus*_*afa 9

确保您的应用具有相机权限,例如

<uses-permission android:name="android.permission.CAMERA"/>
Run Code Online (Sandbox Code Playgroud)

在AndroidManifest.xml中