如何使用 GooglePlay Services Vision API Xamarin Android 打开手电筒/手电筒

问题描述 投票:0回答:2

过去几天我一直在尝试使用 GooglePlay Services Vision API(使用 Visual Studio 中的 Nuget)实现相机的手电筒/手电筒功能,但没有成功。我注意到这个 API 的 GitHub 实现具有这样的功能,但仅适用于 Java 用户。 我想知道是否有与 C# Xamarin 用户相关的内容。

相机对象在此 API 上不可用,因此我无法更改激活手电筒所需的相机参数。

我想确定该功能是否不可用,这样我就不会在这方面浪费更多时间。 Xamarin 开发人员可能尚未关注此功能,但他们可能会在不久的将来关注此功能。


更新

https://github.com/googlesamples/android-vision/blob/master/visionSamples/barcode-reader/app/src/main/java/com/google/android/gms/samples/vision/barcodereader/BarcodeCaptureActivity。 java

在那里你可以看到第214行我们有这样的方法调用:

mCameraSource = builder.setFlashMode(useFlash ? Camera.Parameters.FLASH_MODE_TORCH : null).build();

SetFlashMode不是Nuget中CameraSource的方法,但在GitHub(开源版本)上有。

android xamarin torch flashlight android-vision
2个回答
1
投票

Xamarin Vision Library 没有公开设置 Flash 模式的方法。

解决方法。 使用反射。您可以从 CameraSouce 获取相机对象并添加闪光灯参数,然后将更新的参数设置到相机。

这应该在创建表面视图后调用

代码

  public Camera getCameraObject (CameraSource _camSource)
        {
            Field [] cFields = _camSource.Class.GetDeclaredFields ();
            Camera _cam = null;
            try {
                foreach (Field item in cFields) {
                    if (item.Name.Equals ("zzbNN")) {
                        Console.WriteLine ("Camera");
                        item.Accessible = true;
                        try {
                            _cam = (Camera)item.Get (_camSource);
                        } catch (Exception e) {
                            Logger.LogException (this, e);
                        }
                    }
                }
            } catch (Exception e) {
                Logger.LogException (this, e);
            }
            return _cam;
        }

        public void setFlash (bool isEnable)
        {
            try {
                isTorch = !isEnable;
                var _cam = getCameraObject (mCameraSource);
                if (_cam == null) return;
                var _pareMeters = _cam.GetParameters ();
                var _listOfSuppo = _cam.GetParameters ().SupportedFlashModes;
                _pareMeters.FlashMode = isTorch ? _listOfSuppo [0] : _listOfSuppo [3];
                _cam.SetParameters (_pareMeters);
            } catch (Exception e) {
                Logger.LogException (this, e);
            }
        }

0
投票

基本上,您可以使用 Android 执行的任何操作都可以使用 Xamarin.Android 完成。所有底层 API 区域均可用。

由于您有现有的 Java 代码,因此您可以创建一个绑定项目,使您能够从 Xamarin.Android 项目调用代码。这里有一篇关于如何开始的好文章:绑定 Java 库

另一方面,我认为你不需要一个图书馆来做你想做的事。如果您只需要手电筒/手电筒功能,则只需调整此答案中的 Java 代码即可使用 C# 在 Xamarin.Android 中工作。

© www.soinside.com 2019 - 2024. All rights reserved.