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

Posted

技术标签:

【中文标题】W/CameraBase:连接到相机时发生错误:0【英文标题】:W/CameraBase﹕ An error occurred while connecting to camera: 0 【发布时间】:2015-07-11 20:56:25 【问题描述】:

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

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

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

为了进一步验证问题出在硬件的某个地方,我在另一部手机上运行了相同的代码,它运行良好。不知何故,相机被锁定,无法打开。

以下是相关代码:

创建一个预览对象

_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 文档,但他们没有讨论如果从会话外部锁定如何“释放相机”。

完全注销是

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.access$800(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)

您能告诉我如何“解锁”像这样锁定的相机吗?

【问题讨论】:

【参考方案1】:

“无法连接到相机服务”意味着您的(或其他)相机应用未能正确释放相机。当我开发我的应用程序时,这种情况偶尔也会发生在我身上。我要尝试的第一件事是从手机附带的默认相机应用程序中打开相机(只需点击“相机”按钮)。如果无法打开,那么唯一的选择就是重启手机。

这是推测,但您的代码可能有一个错误,它只是偶尔出现,并且直到现在才出现,这完全是靠运气。如果它仍然存在,请查看与“如何在 android 中正确释放相机”相关的问题。他们帮助我解决了这个问题。

【讨论】:

【参考方案2】:

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

【讨论】:

对我来说,在尝试运行示例应用程序时就是这种情况。它从未请求许可,并且相机视图不起作用。转到 settings>apps>yourappname>permissions 并打开相机权限。【参考方案3】:

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

我从使用 Camera.open() 更改为 Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK),现在无论之前如何放置相机,它都可以正常工作。 (使用 Galaxy Note 4)。

希望这会有所帮助。

【讨论】:

以上是关于W/CameraBase:连接到相机时发生错误:0的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 错误:py4j.java_gateway:尝试连接到 Java 服务器时发生错误(127.0.0.1:50532)

错误:无法连接到相机服务@Android marshmallow

错误:无法连接到相机服务@Android marshmallow

Android 6.0 RuntimeException:无法连接到相机服务

相机错误“无法连接到相机”或在某些手机中出现错误“相机正在被另一个应用程序使用”

如何在统一 2d 中将相机连接到生成的玩家?