【发布时间】:2016-05-09 05:05:07
【问题描述】:
我正在编写相机应用程序。我已经开始使用android.hardware.Camera 和相应的类。但有时我的应用程序无法连接到相机。这取决于设备型号和 Android 版本。但是,如果应用程序在某些设备上运行良好,一两天后它就会开始失败。我注意到的另一件事 - 如果我的应用无法连接,那么内置相机应用也无法连接。
我在 stackoverflow 上阅读了几乎所有与 Camera API 和相关异常相关的帖子,并决定用 CommonsGuy 的库 https://github.com/commonsguy/cwac-cam2 替换我的代码。而且,不幸的是,失败仍然存在。
我发现失败后我只能在设备重启后才能再次使用 Camera API。
所以我想问一下,是否可以通过编程方式在不重新启动设备的情况下再次使用相机?也许有办法杀死相机服务或上传原生相机代码?
失败示例(Nexus 4、Android 5.1):
Fatal Exception: java.lang.RuntimeException: Fail to connect to camera service
at android.hardware.Camera.<init>(Camera.java:497)
at android.hardware.Camera.open(Camera.java:342)
at com.commonsware.cwac.cam2.ClassicCameraEngine$1.run(ClassicCameraEngine.java:78)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
【问题讨论】:
-
在不同的情况下释放相机,例如从前到后或反之亦然,onDestroy() 方法等。做一些代码:
mCamera.stopPreview(); mCamera.release(); -
由于前置摄像头连接器损坏,我的手机也遇到了这个问题。解决方案是在按下相机连接器部分的同时重新启动设备
-
如果您的应用程序比内置相机应用程序更频繁地发生这种情况,那么您的代码有一些错误,没有在必要时释放相机。应用停止时可能会出现一些棘手的线程冲突,很容易失去对相机的跟踪。
-
在有根设备上,杀死 MediaServer 很简单。在非 root 设备上,没有已知漏洞可以强制重启,至少没有任何漏洞适用于所有 ROM 和型号。
标签: android camera commonsware-cwac