Я использую Google Vision API для сканирования штрих-кода в своем мобильном приложении. Наряду с этим я пытаюсь включить вспышку света. Но в последней версии Vision API я не могу найти какой-либо метод для включения флэш-памяти. Поэтому я использую метод ниже для включения и выключения Flash (который работает отлично). Но API камеры устарел, и я не уверен, как реализовать
то же самое с использованием Camera2 API.
код, который я использую - с устаревшим 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. Есть мысли по этому поводу?