如何使用Google Play Services Vision API Xamarin Android开启火炬/手电筒

如何使用Google Play Services Vision API Xamarin Android开启火炬/手电筒,android,xamarin,torch,flashlight,vision,Android,Xamarin,Torch,Flashlight,Vision,在过去的几天里,我一直在尝试使用Google Play Services Vision API(使用Visual Studio中的Nuget)实现相机的闪光灯/火炬功能,但没有成功。我注意到这个API有一个GitHub实现,它具有这样的功能,但只对Java用户可用。 我想知道是否有什么与C#Xamarin用户有关 摄像头对象在此API上不可用,因此我无法更改激活手电筒所需的摄像头参数 我想确定是否该功能不可用,这样我就不会在这上面浪费更多的时间。Xamarin开发人员可能没有注意到这一功能,他们

在过去的几天里,我一直在尝试使用Google Play Services Vision API(使用Visual Studio中的Nuget)实现相机的闪光灯/火炬功能,但没有成功。我注意到这个API有一个GitHub实现,它具有这样的功能,但只对Java用户可用。 我想知道是否有什么与C#Xamarin用户有关

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

我想确定是否该功能不可用,这样我就不会在这上面浪费更多的时间。Xamarin开发人员可能没有注意到这一功能,他们可能会在不久的将来注意到这一点


更新

在这里,您可以看到第214行有这样的方法调用:

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

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

基本上,你可以用Android做的任何事情都可以用Xamarin.Android完成。所有底层API区域都可用

因为您已有Java代码,所以可以创建一个绑定项目,使您能够从Xamarin.Android项目中调用代码。以下是一篇关于如何开始的好文章:


另一方面,我认为你不需要图书馆来做你想做的事。如果您只想使用手电筒/手电筒功能,只需将中的Java代码改编为在Xamarin中工作。带有C#的Android。

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

解决方法。 使用反射。您可以从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);
            }
        }

我也用相机。所以如果我用手电筒,相机就不可用了。我将看一看绑定java库。我会回来找你的,谢谢。只是不明白为什么nuget版本不支持闪光灯参数:(谷歌Vision API的Nuget版本仅绑定Vision API Java
.jars
。这些谷歌示例中的其他功能,如摄像头生成器,都是用Java编写的,可以访问本机操作系统API,以提供Vision API功能的完整演示。您是否有指向谷歌Vision API的链接以获得闪光灯支持?我没有I don’我不认为这是Vision API中的一个公开信息….?如果你有一个指向Java源代码的链接,那么该源代码是访问Vision API还是通过OS API调用来访问Vision API?我不知道你的意思,但这是我所说的github:。我编辑了我的问题以解决你的问题。Vision API中不包括闪光灯,Google im完成这些功能(
CameraSource.Builder
)在作为Vision API附加的示例代码中,为了拍摄图像并作为演示提供条形码解码器,您需要将Java移植到C#:我明白了。我将尝试实现它。希望我能设法让它工作。@GustavoBaiocchiCosta您找到解决方案了吗?感谢您的发布,我正在mo的另一个项目中工作我会尽快回复的,如果成功的话,我会把你的答案标记为接受,谢谢!我记得当我做类似的事情时,如果你已经用它来显示相机预览,你就不能得到相机对象。必须测试一下!是的。正是你说的。祝你好运!即使在创建曲面之后,我也会返回空值dNULL CAMERA SOLVED:由于我使用的版本没有将CAMERA属性名称混淆为“zzbNN”,因此更好的解决方案是检查item.Type.CanonicalName==“android.hardware.CAMERA”。