【问题标题】:How to turn on the torch/flashlight with GooglePlay Services Vision API Xamarin Android如何使用 Google Play Services Vision API Xamarin Android 打开手电筒/手电筒
【发布时间】:2017-02-23 14:25:42
【问题描述】:

过去几天,我一直在尝试使用 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上(开源版)。

【问题讨论】:

  • 您是否有指向 Google Vision API 的链接以支持手电筒?我不认为这是在 Vision API 中暴露的......?如果您有指向执行此操作的 Java 源的链接,该源是访问 Vision API 还是通过 OS API 调用执行此操作?
  • 我不知道你的意思,但这里是我正在谈论的 github:github.com/googlesamples/android-vision。我编辑了我的问题以解决您的问题。
  • 手电筒包含在 Vision API 中,Google 在示例代码中实现了这些功能 (CameraSource.Builder) 作为 Vision API 的补充,以便拍摄图像和提要条形码解码器作为演示,您需要将 Java 移植到 C#:github.com/googlesamples/android-vision/blob/master/…
  • 我明白了。我将尝试实现这一点。希望我能设法让它工作。
  • @GustavoBaiocchiCosta 您找到解决方案了吗?

标签: android xamarin torch flashlight vision


【解决方案1】:

Xamarin 视觉库未公开设置 Flash 模式的方法。

解决方法。 使用反射。您可以从 CameraSouce 中获取 Camera Object 并添加 flash 参数,然后将更新的参数设置为相机。

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

代码

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

【讨论】:

  • 感谢您的发帖,我目前正在从事不同的项目。我会尽快回复它,如果它有效,我会将您的答案标记为已接受,谢谢!我记得当我做类似的事情时,如果您已经使用它来显示相机预览,则无法获取相机对象。必须测试一下!
  • 是的。正是你所说的。祝你好运!
  • 为我返回 null,即使在表面创建之后也是如此
  • NULL CAMERA SOLVED: 由于我使用的版本没有将相机属性名称混淆为“zzbNN”,因此更好的解决方案是检查 item.Type.CanonicalName == "android.hardware .相机”。
【解决方案2】:

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

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

另一方面,我认为你不需要图书馆来做你想做的事。如果您只需要手电筒/手电筒功能,您只需调整来自 this answer 的 Java 代码,以便在带有 C# 的 Xamarin.Android 中工作。

【讨论】:

  • 我也使用相机。因此,如果我使用手电筒,相机将无法使用。我将看看绑定一个java库。我会在这个问题上回复你,谢谢。只是不明白为什么nuget版本不支持手电筒参数:(
  • Google Vision API 的 Nuget 版本仅绑定 Vision API Java .jars。这些 Google 示例中的其他功能(例如 Camera Builder)是用 Java 编写的,并且可以访问本机操作系统 API 以提供 Vision API 可以做什么的完整演示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
相关资源
最近更新 更多