java.lang.RuntimeException:无法连接到摄像头服务

时间:2011-07-31 00:25:57

标签: android camera

我尝试制作应用程序,而不是可以打开和关闭相机闪光灯。 我的代码看起来像这样:

Camera flash;
Camera.Parameters params;

flash = Camera.open();
params = flash.getParameters();

params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);        
flash.setParameters(params);

在清单xml中:

<permission android:name="android.permission.FLASHLIGHT"  

android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
          android:protectionLevel="normal" />

<permission android:name="android.permission.CAMERA"> </permission>

每次运行代码时,应用程序都会在“flash = Camera.open();”崩溃有这个错误:

  

java.lang.RuntimeException:无法连接到摄像头服务

我做错了什么?

4 个答案:

答案 0 :(得分:34)

要访问设备相机,您必须在Android Manifest中声明CAMERA权限,

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

答案 1 :(得分:7)

您可能忘记在onDestroy

中致电发布

例如:

@Override
protected void onDestroy() {
    if (mCamera != null) {
        mCamera.release();
    }
    super.onDestroy();
}

答案 2 :(得分:2)

您需要以编程方式在android 6.x上添加新的请求权限。

 private static final int MY_PERMISSIONS_REQUEST_CAMERA = 555;

if (ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(getActivity(), new String[]{android.Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA);
        } else {
            IntentIntegrator.forSupportFragment(this).initiateScan();
        }

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_CAMERA: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                IntentIntegrator.forSupportFragment(this).initiateScan();
            } else {
                FragmentHelper.popFragment(getActivity(), null, null);
            }
        }
    }
}

答案 3 :(得分:1)

通常这个问题是由于缺少相机请求权限,正如其他用户已经说过的那样。

但是,只是为了在这里注册另一个原因,如果您尝试使用不存在的cameraID打开相机,您将收到相同的错误

  

java.lang.RuntimeException:无法连接到摄像头服务