带摄像头底座﹕连接到相机时出错:0



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

带摄像头底座﹕连接到相机时出错:相机上的0。open()调用

我有一个应用程序(自然)正在使用相机。它一直运行良好。然而,由于没有代码更改,在两次构建之间,应用程序开始崩溃(通过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;
}

这就是错误发生的地方,相机。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)

你能告诉我如何"解锁"像这样锁住的相机吗

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

这只是猜测,但您的代码可能偶尔会出现一个bug,而且它直到现在才出现,纯粹是运气使然。如果它持续存在,请查看与"如何在android中正确释放相机"相关的问题。他们帮我解决了这个问题。

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

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

我从使用Camera.open()改为使用Camera.oopen(Camera.CameraInfo.Camera_FACING_BACK),现在无论相机以前是如何放置的,这都能工作。(使用Galaxy Note 4)。

希望这能有所帮助。

最新更新