Android 每次调用 "Camera camera = Camera.open();" 时都会抛出错误

Android throws error everytime when "Camera camera = Camera.open();" is called

我在 Android 中使用相机时遇到问题。

在 API 25 Nougat 7.1.1 SDK 上开发。最小目标 SDK 设置为 15。

每次调用都会抛出错误:

Camera camera = Camera.open();

出现错误"RuntimeException: Fail to connect to camera service",从我的模拟器(Nexus 5X API 25 Android 7.1.1)可以看出

在真实设备上测试 (Android 5.1.1) 相机功能也不起作用 - 完全相同的问题。

代码如下:

import android.hardware.Camera;

...

boolean hasCamera = false;

private boolean hasCamera(Context context) {
        return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
    }

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...

    hasCamera = hasCamera(this);
    if(!hasCamera) {
        takePhotoButton.setText("No Camera Found");
        takePhotoButton.setEnabled(false);
    }
}

private class TakePhotoButtonListener implements View.OnClickListener {
    @Override
    public void onClick(View v) {
        if(hasCamera) {
            try {
                Camera camera = Camera.open();
                camera.startPreview();
                camera.takePicture(
                        null,
                        null,
                        new CameraPictureCallbackJPEG());
            } catch (Exception e) {
                Log.i("Error", e.getMessage());
            }
        }
    }
}

确实检测到相机(hasCamera == true)。

我不再使用 Camera2(从 API 21 开始),因为我希望我的应用程序在 API 15 之后运行。

我在这里尝试了很多答案,但没有任何效果。请指教!

如果未添加以下权限,请将以下权限添加到您的清单文件中。

<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />

重要提示: 发生这种情况是因为您在第一次启动时打开了相机,之后您还没有释放它的资源。 确保你应该这样做

camera.stopPreview();
camera.release();
camera = null;

当您使用完相机后,您必须执行上述清理和释放资源的过程。

希望对您有所帮助。