使用Vision API进行条形码检测期间打开闪光灯-Xamarin Android

时间:2018-11-01 14:20:00

标签: xamarin.android android-camera android-camera2 google-vision

我正在使用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吗?有什么想法吗?

0 个答案:

没有答案