因此,对于我的Android应用,我创建了一个SurfaceView
并将其分配为相机预览,并使用必要的API启动相机预览。但是现在我想在预览工作时打开手电筒(有点像火炬)。
请注意,我在网上看到了很多有关如何打开手电筒的示例,只要我不调用开放式相机API,它就可以工作。下面是代码-
try
{
CameraManager cameraManager = (CameraManager)context.GetSystemService(Context.CameraService);
if (cameraManager != null)
{
//for the sake of brevity, hardcoded the camera id. 0 is mostly back camera
cameraManager.SetTorchMode(0, true);
}
}
catch (CameraAccessException e)
{
LogUtil.Error("CameraInput", e.ToString());
}
请注意,我正在Android N上进行测试,因此以上代码可完美运行。但是,只要我在下面的代码行中调用,闪光灯就会关闭。
Camera camera = Camera.Open(0);
// ...... some code ....//
camera.StartPreview();
执行以上两行时,闪光灯熄灭。这是一个已知的行为吗,例如相机在哪里独占锁定了闪存硬件并将其值重置为默认值。
我尝试逆转上述代码,即先调用Camera Open API,然后再设置闪光灯。这样,我得到CameraAccessException
的相机已经在使用中。
我想念什么?
答案 0 :(得分:0)
在SurfaceView
上预览时尝试
params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_ON);
camera.setParameters(params);
请记住,如果要将其用作手电筒,可以执行以下操作:
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
如果没有,要打开闪光灯以在拍摄照片时将其熄灭,请使用:
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
快乐编码!
答案 1 :(得分:0)
弄清楚了如何在预览相机时打开和关闭手电筒。在按钮上单击以打开/关闭灯,使用此代码:
//at some other function where camera is initialised and start preview
//...
Camera camera = Camera.open();
camera.startPreview();
//...
boolean lightOn = false;
//...
buttonLight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Camera.Parameters p = camera.getParameters();
if (!lightOn) {
lightOn = true;
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(p);
} else {
lightOn = false;
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(p);
}
}
});
快乐编码! :D