Flutter-geolocator: Android - CheckGeolocationPermissionStatus, выполняемый в первый раз, отклонен

Созданный на 9 июл. 2020  ·  3Комментарии  ·  Источник: Baseflow/flutter-geolocator

На платформе Android, когда я запускаю Geolocator (). CheckGeolocationPermissionStatus () функция в первый раз GeolocationStatus отрицается и не спрашивая разрешения у пользователя. Но в IOS, когда я вызываю ту же функцию в первый раз, GeolocationStatus неизвестен, поэтому я знаю, что должен вызвать Geolocator (). GetCurrentPosition () для запроса разрешения у пользователя и возврата местоположения, если разрешение было предоставлено.

Есть ли способ запросить у пользователя разрешение в Android, когда я впервые вызываю checkGeolocationPermissionStatus?

под моим кодом:

Future<void> getLocation() async {
    try {

      var serviceEnabled = await  Geolocator().isLocationServiceEnabled();

      if (serviceEnabled) {
        var geolocationStatus =
            await Geolocator().checkGeolocationPermissionStatus();

        if (geolocationStatus == GeolocationStatus.granted || geolocationStatus == GeolocationStatus.unknown) {
          position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
          return;
        } 
      }
    } catch (e) {
      print(e);
    }
  }

Все 3 Комментарий

Похоже, этот менеджер плагинов больше не заинтересован в поддержании или поддержке своего сообщества, я видел много проблем, но не нашел точного решения или решения для них.

Да, ты прав! Я видел и другие вопросы без ответов. знак равно

@azeemgujjar , @ CNogueira92 , это не так. На самом деле я усердно работаю над следующим крупным выпуском, но, как и в большинстве проектов OSS, мне нужно делать это в свободное время, которое на данный момент немного ограничено, поэтому мое внимание немного разделено. Конечно, я приветствую вклад в плагин, чтобы помочь.

Чтобы ответить на ваш вопрос @ CNogueira92 , Android и iOS обрабатывают разрешения по-разному. По умолчанию Android рассматривает разрешения как «запрещенные» (даже если пользователь не отказал им явно). iOS имеет особый статус для ситуации, когда разрешения еще не запрашивались (это называется «Не определено», что мы переводим как «неизвестно»).

На обеих платформах можно запрашивать разрешения, когда checkGeolocationPermissionStatus возвращает denied или unknown . Если пользователь выбрал опцию «Отклонено и больше не спрашивать», Геолокатор заметит это и не запросит разрешения.

На самом деле вам даже не нужно вручную проверять разрешения, так как Geolocator сделает это внутри. Таким образом, вы можете безопасно обновить свой код до:

Future<void> getLocation() async {
    try {

      var serviceEnabled = await  Geolocator().isLocationServiceEnabled();

      if (serviceEnabled) {
        position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
      } else {
        // TODO: ask the user to enable the location services...   
      }
    } catch (e) {
      print(e);
    }
  }

checkGeolocationPermissionStatus - это всего лишь удобный метод в случае, если вы хотите проверить разрешения вручную и сигнализировать пользователю о необходимости предпринять какие-либо действия. В новом выпуске, о котором я упоминал, вы также сможете вручную запрашивать разрешения. Если вы хотите сделать это сейчас, вам нужно будет позвонить в плагин location_permissions который поставляется с геолокатором. Более подробную информацию о плагине location_permissions можно найти здесь .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги