我正在编写相机应用程序。我开始使用android.hardware.Camera
和相应的课程。但我的应用程序有时无法连接到相机。这取决于设备型号和Android版本。但是如果应用程序在某些设备上工作正常,一两天后就会开始失败。我注意到的另一件事 - 如果我的应用程序无法连接,那么内置摄像头应用程序也无法连接。
我几乎阅读了所有与Camera API相关的帖子以及stackoverflow上的相关异常,并决定用CommonsGuy的库https://github.com/commonsguy/cwac-cam2替换我的代码。不幸的是,失败仍然存在。
我发现失败后我只能在设备重启后再次使用Camera API。
所以我想问一下,是否可以通过编程方式做一些事情,以便在不重启设备的情况下再次使用相机?也许有办法杀死Camera Service或上传本机Camera代码?
失败示例(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)
答案 0 :(得分:2)
所以我想问一下,是否可以通过编程方式做一些事情,以便在不重启设备的情况下再次使用相机?
不,抱歉。
答案 1 :(得分:0)
检查这个参考:http://developer.android.com/training/camera/cameradirect.html 试试这段代码:
try
{
releaseCameraAndPreview();
if (camId == 0) {
mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
} else {
mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
}
}
catch(Exception e)
{
Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
}
然后在某处添加此功能:
private void releaseCameraAndPreview() {
myCameraPreview.setCamera(null);
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
}