W/CameraBase﹕连接相机时发生错误:0

W/CameraBase﹕ An error occurred while connecting to camera: 0

有一个类似的问题,但没有得到解决:

W/CameraBase﹕ An error occurred while connecting to camera: 0 on camera.open() call

我有一个(自然地)使用相机的应用程序。它一直工作正常。然而,由于没有代码更改,在构建之间,应用程序开始崩溃(通过 Git 提交历史验证没有代码更改)。

为了进一步验证问题出在硬件的某个地方,我 运行 在另一个 phone 上使用相同的代码,它工作正常。不知何故相机被锁定,无法打开。

相关代码如下:

创建预览对象

_cameraPreview = new CameraPreview(getActivity(),_camera);

这是它的创建代码

 public CameraPreview(Context context, Camera camera) 
    {
        super(context);
        _camera = camera;
        _surfaceHolder = getHolder();
        _surfaceHolder.addCallback(this);
    }

打开相机:

//默认开启后置摄像头

public static Camera getCameraInstance()
{
    Camera c = null;
    try
    {
        c = Camera.open();
    }catch (Exception e)
    {
       e.printStackTrace();
    }

    return c;
}

这是发生错误的地方,camera.Open 抛出以下堆栈跟踪错误。我的相机对象为空。此代码来自官方 Android 文档,但他们没有讨论如何 'release the camera' 如果它从会话外部被锁定。

完整注销是

W/CameraBase﹕ An error occurred while connecting to camera: 0
W/System.err﹕ java.lang.RuntimeException: Fail to connect to camera service
W/System.err﹕ at android.hardware.Camera.<init>(Camera.java:497)
W/System.err﹕ at android.hardware.Camera.open(Camera.java:357)
W/System.err﹕ at co.pumpup.app.EditPhotoFragment.getCameraInstance(EditPhotoFragment.java:241)
W/System.err﹕ at co.pumpup.app.EditPhotoFragment.onCreateView(EditPhotoFragment.java:76)
W/System.err﹕ at android.app.Fragment.performCreateView(Fragment.java:2053)
W/System.err﹕ at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894)
W/System.err﹕ at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
W/System.err﹕ at android.app.BackStackRecord.run(BackStackRecord.java:834)
W/System.err﹕ at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452)
W/System.err﹕ at android.app.Activity.performStart(Activity.java:6005)
W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)
W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
W/System.err﹕ at android.app.ActivityThread.access0(ActivityThread.java:151)
W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5254)
W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

你能告诉我如何 'unlock' 像这样锁定相机吗?

"fail to connect to camera service" 表示您的(或其他一些)相机应用未能正确释放相机。在我开发应用程序时,这种情况偶尔也会发生在我身上。我要尝试的第一件事是从 phone 附带的默认相机应用程序打开相机(只需点击 "camera" 按钮)。如果无法打开,那么唯一的选择就是重新启动 phone.

这只是猜测,但您的代码可能有一个错误,该错误只是偶尔出现,直到现在才出现,纯属运气。如果它仍然存在,请查看与 "how to release camera properly in android" 相关的问题。他们帮我解决了这个问题。

我不知道这是否是你的情况,但它恰好发生在我身上,所以我想我会分享它。我的应用程序在做同样的事情(虽然我尝试围绕 Camera.open() 所以一开始我没有看到它)但是我做了 panonski 说的并从系统相机应用程序打开相机并看到了它正在使用前置摄像头。将其切换回后置摄像头让我的应用程序再次运行。

我从使用 Camera.open() 更改为 Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK),现在无论相机之前如何放置,这都有效。 (使用盖乐世 Note 4)。

希望这对您有所帮助。

从 Android 6.0(API 级别 23)开始,用户在应用 运行 时向应用授予权限,而不是在安装应用时。这种方法简化了应用程序安装过程,因为用户在安装或更新应用程序时不需要授予权限。它还使用户可以更好地控制应用程序的功能;例如,用户可以选择授予相机应用访问相机但不访问设备位置的权限。用户可以随时通过转到应用程序的设置屏幕来撤销权限。 http://developer.android.com/training/permissions/requesting.html