Android上的不稳定相机行为

时间:2016-05-09 05:05:08

标签: android camera commonsware-cwac

我正在编写相机应用程序。我开始使用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)

2 个答案:

答案 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;
    }
}