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