Flutter如何在Android 13上获取location权限状态

在Flutter开发的Android应用中,如何在Android 13系统上正确检测和获取location权限的当前状态?我尝试使用permission_handler插件,但发现返回的权限状态与系统实际设置不一致。请问有什么可靠的方法可以准确判断用户是否授予了精确定位或近似定位权限?需要兼容Android 13的新权限变更。

2 回复

在Flutter中,使用permission_handler包获取Android 13的定位权限状态:

  1. 添加依赖:
dependencies:
  permission_handler: ^11.0.1
  1. 检查权限状态:
var status = await Permission.location.status;
if (status.isGranted) {
  // 已授权
} else if (status.isDenied) {
  // 未授权
}

注意:Android 13需要单独请求ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION权限。

更多关于Flutter如何在Android 13上获取location权限状态的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Android 13 上,Flutter 可以通过 permission_handler 插件获取位置权限状态。以下是具体步骤:

  1. 添加依赖
    pubspec.yaml 中添加:

    dependencies:
      permission_handler: ^11.0.0
    
  2. 配置 Android 权限
    android/app/src/main/AndroidManifest.xml 中添加所需权限:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    
  3. 检查权限状态
    使用以下代码检查位置权限状态:

    import 'package:permission_handler/permission_handler.dart';
    
    Future<void> checkLocationPermission() async {
      final status = await Permission.location.status;
      if (status.isGranted) {
        // 权限已授予
      } else if (status.isDenied) {
        // 权限被拒绝
      } else if (status.isPermanentlyDenied) {
        // 权限被永久拒绝,需引导用户到设置中开启
      }
    }
    
  4. 请求权限(可选)
    若需请求权限:

    final result = await Permission.location.request();
    if (result.isGranted) {
      // 用户授予权限
    }
    

注意事项

  • Android 13 引入了更细粒度的位置权限,需根据需求选择 ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION
  • 若应用目标 SDK 为 Android 13+,需在代码中动态请求权限。

通过以上步骤即可在 Flutter 中获取并管理 Android 13 的位置权限状态。

回到顶部