【问题标题】:Android - Fail to connect to cameraAndroid - 无法连接到相机
【发布时间】:2014-06-30 11:09:19
【问题描述】:

我正在使用 Android APIDemo 示例代码。

当我运行 CameraPreview 示例时,起初它是 giving me an error

我追踪了那个,样本工作了一段时间。
现在,它不再起作用了。它说

ERROR/AndroidRuntime(2949): java.lang.RuntimeException: Fail to connect to camera service  

是什么原因造成的?它发生在调用camera.open() 时。

谢谢,
三通

【问题讨论】:

    标签: android


    【解决方案1】:

    确保正确释放所有获取的相机资源:

        @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        if (mCam != null) {
            mCam.stopPreview();
            mCam.setPreviewCallback(null);
            mCam.release();
            mCam = null;
        }
    }
    
        @Override
    public void surfaceCreated(SurfaceHolder holder) {
        if (mCam == null) {
            mCam = Camera.open();
            try {
                mCam.setPreviewDisplay(holder);
    
                // TODO test how much setPreviewCallbackWithBuffer is faster
                mCam.setPreviewCallback(this);
            } catch (IOException e) {
                mCam.release();
                mCam = null;
            }
        }
    }
    

    【讨论】:

    • 这个错误非常神秘,即使在刚刚开始和停止预览之间我也会遇到这个问题(引擎级别的编码非常混乱,这不是你的错)。我发现在开始和停止预览之间释放相机可以修复这个错误
    【解决方案2】:

    确保您的<uses-permission> 元素are in the proper positions 在您的AndroidManifest.xml 文件中。

    【讨论】:

    • 我仍然随机收到此错误。我的一个活动连接到相机,在模拟器上拍照,将数据传递给下一个活动。当我延迟重新启动活动时,应用程序崩溃并出现相同的错误。但这下次我启动完整的应用程序时会起作用
    • 对,权限应该在标签之外
    【解决方案3】:

    如果您的活动在surfaceDestroyedonConfigurationChanged 等中没有正确关闭相机,就会发生这种情况...

    不要忘记在每次离开活动时都这样做:

            if (camera!=null){
                    camera.stopPreview();
                    camera.release();
                    camera=null;
            }
    

    【讨论】:

      【解决方案4】:

      此错误的另一个原因是当您尝试打开相机但其他一些应用程序甚至您的应用程序已经使用相机时。

      【讨论】:

      • 它应该是一个不能正确释放相机的应用程序,对吧?有没有比较常见的不释放相机的应用?
      【解决方案5】:

      我在 HTC 设备上也遇到过此类问题。要解决添加此代码:

      @Override
      protected void onDestroy() {
          // TODO Auto-generated method stub
          super.onDestroy();
          if (camera!=null)
          {
              camera.stopPreview();
              camera.release();
              camera=null;
          }
      }
      

      但您无法启动相机然后重新启动设备。

      【讨论】:

      • @Override protected void onDestroy() { try { camera.stopPreview(); camera.setPreviewCallback(null); try{camera.release();}catch (Exception e) {} camera = null;预览=空; } 捕捉(异常 e){} super.onDestroy(); }
      【解决方案6】:

      此外,如果您使用的是模拟器,请确保您已选择模拟前置摄像头和/或后置摄像头。

      Android虚拟设备管理器->选择设备->编辑->前置摄像头->模拟

      【讨论】:

        【解决方案7】:

        正如其他人提到的,您必须在完成后调用相机对象上的 release()。

        我最初并没有这样做,所以我更改了我的代码,但它仍然给了我同样的错误。我直接部署到实体手机上,必须重启手机才能正常工作

        【讨论】:

          【解决方案8】:

          我在测试时也收到此错误,并在到达代码点之前停止执行:

          if (camera!=null){
              camera.stopPreview();
              camera.release();
              camera=null;
          }
          

          被调用。这然后阻止了相机,因为它没有正确释放。我的解决方案是关闭相机并重新打开。您可以通过尝试使用手机中的内置相机应用程序来确认是这种情况。它也不会工作,因为它仍然很忙。

          【讨论】:

            【解决方案9】:

            第二个@matt-burns,但是您可能想检查一下您是否只尝试获取相机一次。我忘记注释掉一行,并试图启动两个都试图获取相机的活动。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-05-12
              • 2016-01-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多