我正在制作一个安卓手电筒应用程序。我它有两个活动,一个主要活动和一个设置活动,可以打开和关闭摄像头。它还有另一个类,其中处理所有相机更改,例如打开它、释放它以及打开和关闭灯。
在基于共享偏好设置打开 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;
}
}