我正在使用Android APIDemo示例代码。
当我运行CameraPreview示例时,首先是giving me an error。
我跟踪了那一个,样品工作了一段时间 现在,它不再有效。它说
ERROR/AndroidRuntime(2949): java.lang.RuntimeException: Fail to connect to camera service
可能导致什么?它会在调用camera.open()
时发生。
谢谢,
三通
答案 0 :(得分: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;
}
}
}
答案 1 :(得分:17)
确保<uses-permission>
文件中的AndroidManifest.xml
元素are in the proper positions。
答案 2 :(得分:5)
如果您的活动未在surfaceDestroyed
或onConfigurationChanged
等处正确关闭相机,则会发生这种情况......
每次退出活动时都不要忘记这样做:
if (camera!=null){
camera.stopPreview();
camera.release();
camera=null;
}
答案 3 :(得分:4)
此错误的另一个原因是当您尝试打开相机但其他应用程序甚至您的应用程序已经使用相机时。
答案 4 :(得分:2)
我也在HTC设备上遇到此类问题。要解决添加此代码:
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (camera!=null)
{
camera.stopPreview();
camera.release();
camera=null;
}
}
然而你无法启动相机然后重启设备。
答案 5 :(得分:2)
此外,如果您使用的是模拟器,请确保已选择模拟前置摄像头和/或后置摄像头。
Android虚拟设备管理器 - &gt;选择设备 - &gt;编辑 - &gt;前置摄像头 - &gt;仿真
答案 6 :(得分:1)
正如其他人所说,你必须在完成后调用相机对象上的release()。
我最初没有这样做,所以我改变了我的代码,但它仍然给了我同样的错误。我正在直接部署到物理手机,并且必须在它工作之前重启手机
答案 7 :(得分:0)
我在测试时也收到了这个错误,并在到达代码中的点之前停止执行:
if (camera!=null){
camera.stopPreview();
camera.release();
camera=null;
}
被召唤。然后这会阻挡相机,因为它没有正确释放。我的解决方案是关闭相机并重新打开。您可以通过尝试在手机中使用内置的相机应用来确认这种情况。它不会工作,因为它仍然很忙。
答案 8 :(得分:0)
秒@ matt-burns然而你可能想要检查你是否只是试图让相机一次。我忘了评论一条线,并试图启动两个试图获取相机的活动。