如何打开和关闭UI线程外的相机?

时间:2017-11-07 15:54:16

标签: java android android-camera

我正在尝试使用以下代码打开和关闭相机手电筒,但每次我调用这些功能时,它会减慢我的整个应用程序。这有点烦人。有什么方法可以在单独的线程中或者以不同的方式进行吗? 提前谢谢。

private void turnOnFlash() {
        if (!isFlashOn && hasFlash) {
            if (camera == null || params == null) {
                return;
            }

            isFlashOn = true;

            params = camera.getParameters();
            params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            camera.setParameters(params);
            camera.startPreview();
        }
    }

    private void turnOffFlash() {
        if (isFlashOn && hasFlash) {
            if (camera == null || params == null) {
                return;
            }

            isFlashOn = false;

            params = camera.getParameters();
            params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            camera.setParameters(params);
            camera.stopPreview();
        }
    }

我从另一个函数调用它,如

if (intensity[3] < 0.5f) {
    turnOnFlash();
} else {
    turnOffFlash();
}

1 个答案:

答案 0 :(得分:0)

setParameters和getParameters可能会花费很长时间。

但真正减慢应用程序的是UI线程成为所有相机回调的处理程序。这里in an old answer我展示了在后台HandlerThread中处理相机是多么容易。

请注意,您在此处使用的相机API在几年前已被弃用,而当前的camera2 API正确处理此线程问题,并且不再需要这些技巧。

您可以将turnOffFlash()和turnOnFlash()发布到同一个HandlerThread。