Android 上的不稳定相机行为
Unstable Camera behaviour on Android
我正在编写相机应用程序。我开始使用 android.hardware.Camera
并对应 类。但有时我的应用程序无法连接到相机。这取决于设备型号和 Android 版本。但是,如果应用程序在某些设备上运行良好,一两天后它就会开始失败。我注意到的另一件事 - 如果我的应用无法连接,那么内置相机应用也无法连接。
我阅读了几乎所有 post 与 Camera API 相关的内容以及 Whosebug 上的相关异常,并决定用 CommonsGuy 的库 https://github.com/commonsguy/cwac-cam2 替换我的代码。而且,不幸的是,失败仍然存在。
我发现失败后我只能在设备重启后才能再次使用相机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.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)
检查此参考: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;
}
}
So I want to ask is it possible to do something programmatically for making possible to use camera again without rebooting device?
不,抱歉。
我正在编写相机应用程序。我开始使用 android.hardware.Camera
并对应 类。但有时我的应用程序无法连接到相机。这取决于设备型号和 Android 版本。但是,如果应用程序在某些设备上运行良好,一两天后它就会开始失败。我注意到的另一件事 - 如果我的应用无法连接,那么内置相机应用也无法连接。
我阅读了几乎所有 post 与 Camera API 相关的内容以及 Whosebug 上的相关异常,并决定用 CommonsGuy 的库 https://github.com/commonsguy/cwac-cam2 替换我的代码。而且,不幸的是,失败仍然存在。
我发现失败后我只能在设备重启后才能再次使用相机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.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)
检查此参考: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;
}
}
So I want to ask is it possible to do something programmatically for making possible to use camera again without rebooting device?
不,抱歉。