0

我正在制作一个安卓手电筒应用程序。我它有两个活动,一个主要活动和一个设置活动,可以打开和关闭摄像头。它还有另一个类,其中处理所有相机更改,例如打开它、释放它以及打开和关闭灯。

在基于共享偏好设置打开 LED 时,我不断收到错误消息,因为我没有在正确的活动生命周期阶段打开和释放相机。我通过在任一活动中调用 onPause 时释放相机并在任一活动中调用 onResume 时打开或关闭 LED(基于共享首选项设置)来解决问题。

我现在遇到的问题是,如果 LED 亮着,从一个活动切换到另一个活动时它会短暂关闭,因为我必须释放相机然后在新活动中再次打开。谁能帮我想办法解决这个问题?我应该在哪里打开和释放相机?我曾尝试在销毁时将其释放,但当应用程序最小化到后台时 LED 仍保持亮起,这是不可取的。感谢您的任何建议。

在主要活动和设置活动中,我都有:

@Override
    protected void onResume() { 
        super.onResume();

        if (sp.getBoolean("LED_TOGGLE_CB", false) == true) {
            flash.turnFlashOn();
        }
    }

@Override
    protected void onPause() {
        super.onPause();

        flash.killCamera();
    }

在 Flash 课程中,我有:

void getCamera() {
    if(camera == null) {
        try {
                camera = Camera.open();
                params = camera.getParameters();

        } catch(RuntimeException e) {
            Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
        }
    }
}

void turnFlashOn() {
    getCamera();

    params.setFlashMode(Parameters.FLASH_MODE_TORCH);
    camera.setParameters(params);
    camera.startPreview();
    isFlashOn = true;
}

public void killCamera() {
    if (camera != null) {
        camera.stopPreview();
        camera.setPreviewCallback(null);
        camera.release();
        camera = null;
    }
}
4

0 回答 0