Flutter Geolocator 无法获取大概位置

问题描述 投票:0回答:1

我有以下问题:我有一个 flutter 应用程序,它使用 Geolocator 来确定用户位置。该应用程序与精确位置配合得很好,但是当选择近似位置时,它会导致错误:“java.lang.SecurityException:用户 10166 和当前进程都没有 android.permission.ACCESS_FINE_LOCATION。”然后应用程序会自行关闭。

当我进入 Android 模拟器设备设置并将位置权限从“每次询问”更改为“仅在使用应用程序时允许”时,问题不会重现,但这不是我希望用户体验的行为 - 我想要他们会看到 Android 对话框,询问他们是否允许使用他们的位置,并在精确位置和近似位置之间进行选择。

你有什么想法吗?我使用 flutter 3.19.6 和 geolocator 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.');
    }
android flutter permissions location geolocator
1个回答
0
投票

在你的 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" />
© www.soinside.com 2019 - 2024. All rights reserved.