我正在使用Google Vision API扫描移动应用程序中的条形码。与此同时,我正在尝试打开闪光灯。但是在最新版本的Vision API中,我找不到任何启用闪存的方法。因此,我正在使用以下方法启用和禁用Flash(工作正常)。但是不建议使用Camera API,我不确定如何实现 同样使用Camera2 API。
我正在使用的代码-使用不推荐使用的Camera API-工作正常
public void TurnFlashOn(bool status = false)
{
var camera = GetCamera(_cameraSource);
var paramts = camera.GetParameters();
if (status)
paramts.FlashMode = Camera.Parameters.FlashModeTorch;
else
paramts.FlashMode = Camera.Parameters.FlashModeOff;
camera.SetParameters(paramts);
}
private Camera GetCamera(CameraSource cameraSource)
{
var sourceObject = cameraSource.JavaCast<Java.Lang.Object>();
var fields = sourceObject.Class.GetDeclaredFields();
foreach (var field in fields)
{
if (field.Type.CanonicalName.Equals("android.hardware.camera", StringComparison.OrdinalIgnoreCase))
{
field.Accessible = true;
var camera = field.Get(sourceObject);
var cCamera = (Camera)camera;
return cCamera;
}
}
return null;
}
我尝试了下面的代码,但它引发了异常“ Android.Hardware.Camera2.CameraAccessException:CAMERA_IN_USE(4):setTorchMode:1654:”
Camera 2 API尝试与Vision API一起打开闪光灯
public void TurnOnFlash()
{
var manager = (CameraManager)Context.GetSystemService(Context.CameraService);
manager.RegisterTorchCallback(new FlashLightCallback(), null);
manager.SetTorchMode(manager.GetCameraIdList()[0], true);
}
public void TurnOffFlash()
{
var manager = (CameraManager)Context.GetSystemService(Context.CameraService);
manager.SetTorchMode(manager.GetCameraIdList()[0], false);
}
也是
Google为已弃用的API提供访问权限的时间。可以使用不推荐使用的API吗?有什么想法吗?