android - 如何使用 Google Play Services Vision API Xamarin Android 打开手电筒/手电筒

标签 android xamarin torch flashlight vision

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

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

我想确定该功能是否不可用,所以我不会在这上面浪费更多时间。可能只是 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(开源版)上有。

最佳答案

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

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

这应该在创建 surfaceview 之后调用

代码

  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);
            }
        }

关于android - 如何使用 Google Play Services Vision API Xamarin Android 打开手电筒/手电筒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42418470/

相关文章:

linux - 如何在 gcc 版本之间切换以在 manjaro linux 上使用 cudnn 5 加速(cuda 7.5)构建 torch7 或 caffe?

java - EditText 变量未在另一个类中分配

java - 在 Android 中用图像拼写单词

c# - 我可以将对象列表存储到SQLite而不是拆分列表并单独添加对象吗?

c# - 如何在android应用程序中使用持久数据库

pytorch - 手电筒 C++ : API to check NAN

android - Android 中简单的数据库访问方法

android - ActionBar compact with 3 tabs : issue with fragments

swift - 如何在具有多行自动换行的 UITextView 中找到光标 Y 位置?

c++ - 将 std::vector<std::tuple<>> 转换为 torch::Tensor 的最有效方法是什么?