过去几天,我一直在尝试使用 GooglePlay Services Vision API(使用 Visual Studio 中的 Nuget)实现相机的手电筒/手电筒功能,但没有成功。我注意到这个 API 有一个 GitHub 实现,它具有这样的功能,但只对 Java 用户可用。 我想知道是否有任何与 C# Xamarin 用户相关的内容。
Camera 对象在此 API 上不可用,因此我无法更改激活手电筒所需的 Camera 参数。
我想确定该功能是否不可用,所以我不会在这上面浪费更多时间。可能只是 Xamarin 开发人员没有关注此功能,他们可能会在不久的将来。
更新
在那里你可以看到在第 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/