因此,对于我的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
,相机已在使用中。
我想念什么?
在预览时尝试此操作 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);
编码愉快!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句