我应该在哪里释放我的android活动中的相机

时间:2013-12-29 03:20:52

标签: android camera release led flashlight

我正在制作一款Android手电筒应用。我有两个活动,一个主要活动和一个设置活动,可以打开和关闭相机led。它还有另一个类,可以处理所有相机更改,例如打开它,释放它,以及打开和关闭灯。

在基于共享首选项设置打开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;
    }
}

0 个答案:

没有答案