Как включить фонарик / фонарик с помощью GooglePlay Services Vision API Xamarin Android

В последние несколько дней я безуспешно пытался реализовать функцию фонарика / фонарика камеры с помощью API GooglePlay Services Vision (используя Nuget из Visual Studio). Я заметил, что есть реализация GitHub этого API, которая имеет такую ​​функциональность, но доступна только для пользователей Java. Мне было интересно, есть ли что-нибудь, связанное с пользователями C# Xamarin.

Объект Camera недоступен в этом API, поэтому я не могу изменить параметры камеры, необходимые для включения фонарика.

Я хотел бы быть уверен, что эта функциональность недоступна, поэтому я не трачу на это больше времени. Это может быть случай, когда разработчики Xamarin не обращали внимания на эту функциональность, и они могут в ближайшем будущем.


ОБНОВИТЬ

https://github.com/googlesamples/android-vision/blob/master/visionSamples/barcode-reader/app/src/main/java/com/google/android/gms/samples/vision/barcodereader/BarcodeCaptureActivity.java

Там вы можете видеть, что в строке 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#.

Другие вопросы по тегам