java.lang.RuntimeException:无法连接到相机服务

Posted

技术标签:

【中文标题】java.lang.RuntimeException:无法连接到相机服务【英文标题】:java.lang.RuntimeException: Fail to Connect to camera service 【发布时间】:2011-10-16 17:42:45 【问题描述】:

我尝试制作一个可以打开和关闭相机闪光灯的应用。 我的 atm 代码如下所示:

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: 连接相机服务失败

我做错了什么?

【问题讨论】:

尽管清单部分存在格式问题,但我想说您必须为手电筒和相机使用 标签而不是 标签。另外为了清楚起见,请发布正确格式的清单部分(可能还有整个堆栈跟踪,如果这是一个权限问题,应该在 logcat 中的异常之前有一个提示)。 【参考方案1】:

要访问设备摄像头,您必须像这样在您的 Android Manifest 中声明 CAMERA 权限,

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

【讨论】:

这并不完全正确,您不需要使用 uses-feature 标签来访问相机:“声明的 元素仅供参考,这意味着 Android 系统本身不会检查在安装应用程序之前匹配设备上的功能支持。但是,其他服务(例如 Google Play)或应用程序可能会检查您的应用程序的 声明,作为处理或与您的应用程序交互的一部分。" developer.android.com/guide/topics/manifest/…【参考方案2】:

您可能忘记在onDestroy 中调用release

例如:

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

【讨论】:

【参考方案3】:

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

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

java.lang.RuntimeException: 无法连接到相机服务

【讨论】:

【参考方案4】:

您需要在 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);
            
        
    

【讨论】:

以上是关于java.lang.RuntimeException:无法连接到相机服务的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 按钮导致崩溃

添加 ImageView 时应用程序崩溃?