Flutter Geolocator не может определить приблизительное местоположение

У меня следующая проблема: у меня есть приложение Flutter, которое использует Geolocator для определения местоположения пользователей. Приложение прекрасно работает с параметром «Точное местоположение», но при выборе «Приблизительное местоположение» возникает ошибка: «java.lang.SecurityException: ни у пользователя 10166, ни у текущего процесса нет android.permission.ACCESS_FINE_LOCATION». затем приложение закрывается само.

Когда я захожу в настройки устройства-эмулятора Android и меняю разрешения на местоположение с «Спрашивать каждый раз» на «Разрешить только при использовании приложения», проблема не воспроизводится, но это не то поведение, которое я хотел бы, чтобы пользователи испытывали — я хочу, чтобы они чтобы увидеть диалоговое окно Android, в котором их спрашивает, разрешают ли они использовать свое местоположение, и выбрать между «Точным» и «Приблизительным местоположением».

Есть ли у вас какие-либо идеи? Я использую флаттер 3.19.6 и геолокатор 12.0.0.

Я пробовал несколько вещей, например добавление android.permission.ACCESS_FINE_LOCATION и android.permission.ACCESS_COARSE_LOCATION в файлы AndroidManifest, но это не помогло. Более того, я запросил разрешения во время выполнения, но это не решило проблему. Это код:

Future<void> getCurrrentUserLocation() async {
    bool serviceEnabled;
    LocationPermission permission;

    // Check if location services are enabled.
    serviceEnabled = await Geolocator.isLocationServiceEnabled();
    if (!serviceEnabled) {
      print('Location services are disabled.');
      return;
    }

    // Check the current permission status.
    //permission = await Geolocator.requestPermission();
    permission = await Geolocator.checkPermission();
    print('Initial permission status: $permission');

    if (permission == LocationPermission.denied) {
      permission = await Geolocator.requestPermission();
      print('Permission after request: $permission');
      if (permission == LocationPermission.denied) {
        print('Location permissions are denied.');
        return;
      }
    }

    if (permission == LocationPermission.deniedForever) {
      print('Location permissions are permanently denied, we cannot request permissions.');
      return;
    }

    if (permission == LocationPermission.whileInUse || permission == LocationPermission.always) {
      try {
        Position position = await Geolocator.getCurrentPosition(timeLimit: const Duration(seconds: 15));
        print('Latitude: ${position.latitude}, Longitude: ${position.longitude}');
      } catch (e) {
        print('Error occurred while trying to get location: $e');
      }
    } else {
      print('Location permissions are not granted.');
    }
0
0
148
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В файле android/app/build.gradle убедитесь, что compileVersion равен

скомпилироватьSdkVersion 34.

Кроме того, добавьте следующие разрешения в свой AndroidManifest.xml:

<uses-permission android:name = "android.permission.INTERNET" />
<uses-permission android:name = "android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION" />

Эти изменения не решили проблему.

Stoyan Kirov 04.06.2024 09:28
Ответ принят как подходящий

Проблема возникает из последней версии геолокатора 12.0.0. Ошибка и исправление с понижением версии описаны здесь: https://github.com/Baseflow/flutter-geolocator/issues/1515

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