我正在制作一款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;
}
}