2010-04-01 108 views
31

我正在使用Android APIDemo示例代码。Android - 无法连接到相机

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

我跟踪了一下,样本工作了一段时间。
现在,它不再有效。它说

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

什么可能导致这种情况?它发生在调用camera.open()时。

感谢,
三通

回答

17

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

+2

我仍然随机得到这个错误。我的一项活动连接到相机,在模拟器上拍摄一些照片,将数据传递到下一个活动。当我以某种延迟重新启动活动时,应用程序崩溃时出现相同的错误。但这个工程下一次当我启动完整的应用程序作为新鲜 – Nayn 2010-07-26 06:27:34

+0

权利,应该超出标签 – 2014-11-10 13:14:17

28

一定要正确释放所有的获得性资源摄像头:

@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; 
     } 
    } 
} 
+0

这个错误是非常神秘的,我甚至在刚刚开始和停止预览之间遇到这个问题(有引擎级编码正在肆虐,而不是你的错)。我发现,在开始和停止预览之间释放相机修复了这个错误 – Aggressor 2015-07-17 20:43:15

5

它发生,如果你的活动不正常关闭相机surfaceDestroyedonConfigurationChanged等等

不要忘了做到这一点,每次你走你的活动:

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

此错误的另一个原因是,当你试图打开摄像头,但其他一些应用A n甚至您的应用程序是已使用相机

+0

它必须是一个应用程序,虽然没有正确释放相机,对吧?是否有任何相对常见的应用程序不会释放相机? – Kat 2014-04-17 01:08:05

1

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

我最初没有这样做,所以我改变了我的代码,但它仍然给我同样的错误。我是直接部署到物理的手机,不得不重新启动手机之前,它的工作

0

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

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

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

4

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

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

然而,你不能启动相机,然后重新启动设备。

+1

@Override \t protected void onDestroy(){ 尝试camera.stopPreview(); \t \t \t camera.setPreviewCallback(null); try {camera.release();} catch(Exception e){} camera = null; preview = null; (例外e){} super.onDestroy(); } – PankajAndroid 2012-12-25 11:26:19

0

Second @ matt-burns但是你可能想检查一下,你只是想试一次相机。我忘了发表评论,并试图发起两个都试图获得相机的活动。

2

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

Android Virtual Device Manager-> Select Device-> Edit-> Front Camera-> Emulated