过去几天,我一直试图使用GooglePlay Services Vision API(使用Visual Studio中的Nuget)实现相机的手电筒/手电筒功能,但没有成功。我注意到这个API的GitHub实现具有这样的功能,但只有Java用户可以使用。 我想知道是否有与C#Xamarin用户有关的任何内容。
此API上没有Camera对象,因此我无法更改激活手电筒所需的Camera参数。
我想确定该功能是否不可用,因此我不会在此上浪费更多时间。可能就是Xamarin开发人员没有注意到这个功能,他们可能在不久的将来。
更新
在那里你可以看到,在第214行我们有这样的方法调用:
mCameraSource = builder.setFlashMode(useFlash ? Camera.Parameters.FLASH_MODE_TORCH : null).build();
SetFlashMode不是Nuget中CameraSource的方法,但它位于GitHub(开源版本)上。
答案 0 :(得分:0)
基本上,您可以使用Xamarin.Android完成任何可以使用Android的操作。所有底层API区域都可用。
由于您已有Java代码,因此可以创建一个绑定项目,使您可以从Xamarin.Android项目中调用代码。这是一篇关于如何入门的好文章:Binding a Java Library
另一方面,我认为你不需要图书馆去做你想做的事。如果你只需要手电筒/手电筒功能,你只需要调整this answer的Java代码,使用C#在Xamarin.Android中工作。
答案 1 :(得分:0)
Xamarin Vision Library没有公开设置Flash模式的方法。
解决方法。强> 使用反射。您可以从CameraSouce获取Camera Object并添加flash参数,然后将更新的参数设置到摄像机。
应在创建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);
}
}