Flutter: проверьте режим местоположения GPS - PullRequest
0 голосов
/ 28 мая 2020

У меня есть проект, связанный с использованием карт и отслеживания местоположения пользователя, для этого я использовал Geolocator Package . Мне нужно проверить текущее местоположение пользователя, в моем потоковом проекте сначала я проверяю последнюю позицию пользователя, если последняя позиция равна нулю, я проверяю текущую позицию пользователя.

Код

  Position _currentPosition;
  Position get currentPosition => _currentPosition;

  Future<void> getCurrentPosition() async {
    try {
      Position lastPosition = await Geolocator().getLastKnownPosition();
      if (lastPosition != null) {
        print("Success Get Last Position...");
        _currentPosition = lastPosition;
      } else {
        final currentPosition = await Geolocator().getCurrentPosition();
        if (currentPosition != null) {
          print("Success Get Your Current Position...");
          _currentPosition = currentPosition;
        } else {
          throw "Can't Get Your Position";
        }
      }
    } catch (e) {
      throw e;
    }
    notifyListeners();
  }

Затем Я вызываю getCurrentPosition Функция на моей кнопке OnPressed, чтобы получить пользователя местоположения следующим образом:

Кнопка GetLocation

void goToMaps() async {
    final mapsProvider = context.read<MapsProvider>();
    try {

      print('Get Location User');
      await mapsProvider.getCurrentPosition();
      print('Success Get location User');

    } catch (e) {
      globalF.showToast(message: e.toString(), isError: true, isLongDuration: true);
    }
  }

Первая проблема заключается в том, что режим определения местоположения GPS Device Only Я не могу получить LastPosition или Current Position он никогда не печатает Success Get Location User и все равно печатает Get Location User .

Вторая проблема заключается в том, что, когда режим определения местоположения по GPS равен Battery Saving, я получил очень неточное местоположение пользователя, по сравнению с тем, что я использовал в режиме High Accuracy.

Мой вопрос: как я могу проверить, включен ли режим определения местоположения по GPS! = Высокая точность , тогда я могу показать пользователю предупреждение, чтобы установить GPS на высокую точность.

Подобно этому вопрос

Спасибо.

image

1 Ответ

0 голосов
/ 01 июня 2020

Вторая проблема связана с тем, что в режиме Высокая точность android использует и GPS, и местоположение в сети, но в режиме Экономия заряда батареи модуль GPS отключен. Если это был собственный Android, вы могли бы проверить provider местоположения, если вы получили местоположение из LocationManager. Но провайдер недоступен во Flutter в классе Position . Вместо этого вы можете использовать точность . Если оно превышает пороговое значение и не подходит для вашего приложения, вы можете предложить пользователю включить режим высокой точности.

Другой вариант - использовать пакет, отличный от Geolocator (однако Я не знаю ни одного пакета, который предоставляет необходимый интерфейс) или для изменения исходного кода Geolocatior , чтобы он предоставлял информацию о том, какой режим в настоящее время активен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...