Как включить фонарик / фонарик с помощью GooglePlay Services Vision API Xamarin Android
В последние несколько дней я безуспешно пытался реализовать функцию фонарика / фонарика камеры с помощью API GooglePlay Services Vision (используя Nuget из Visual Studio). Я заметил, что есть реализация GitHub этого API, которая имеет такую функциональность, но доступна только для пользователей Java. Мне было интересно, есть ли что-нибудь, связанное с пользователями C# Xamarin.
Объект Camera недоступен в этом API, поэтому я не могу изменить параметры камеры, необходимые для включения фонарика.
Я хотел бы быть уверен, что эта функциональность недоступна, поэтому я не трачу на это больше времени. Это может быть случай, когда разработчики Xamarin не обращали внимания на эту функциональность, и они могут в ближайшем будущем.
ОБНОВИТЬ
Там вы можете видеть, что в строке 214 у нас есть такой вызов метода:
mCameraSource = builder.setFlashMode(useFlash ? Camera.Parameters.FLASH_MODE_TORCH : null).build();
SetFlashMode не является методом CameraSource в Nuget, но он находится на GitHub (версия с открытым исходным кодом).
2 ответа
Библиотека Xamarin Vision Не предоставил метод для установки режима Flash.
Побочные эффекты . Используя Отражение. Вы можете получить объект Camera из 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);
}
}
По сути, все, что вы можете сделать с Android, можно сделать с помощью Xamarin.Android. Доступна вся базовая область API.
Поскольку у вас есть Java-код, вы можете создать связывающий проект, который позволит вам вызывать код из вашего проекта Xamarin.Android. Вот хорошая статья о том, как начать: Привязка библиотеки Java
С другой стороны, я не думаю, что вам нужна библиотека, чтобы делать то, что вы хотите. Если вам нужна только функция факела / фонарика, вам просто нужно адаптировать код Java из этого ответа для работы в Xamarin.Android с C#.