Flutter在Android 13上如何获取定位权限
我在Flutter开发的App中需要获取用户位置信息,但在Android 13系统上遇到权限问题。已经按照官方文档添加了ACCESS_FINE_LOCATION权限,但在运行时权限请求弹窗不显示。请问:
- Android 13是否需要额外配置新的定位权限?
- 在Flutter中应该如何正确处理Android 13的权限请求流程?
- 是否有针对API level 33的特殊适配要求?
- 测试发现onRequestPermissionsResult回调有时不触发,这是已知问题吗?
2 回复
在Flutter中获取Android 13定位权限,需先添加location依赖,然后在AndroidManifest.xml中声明权限。使用permission_handler包请求权限,调用requestPermission方法,处理用户授权结果。
更多关于Flutter在Android 13上如何获取定位权限的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Android 13 上,Flutter 获取定位权限需要适配新的权限模型,主要步骤如下:
1. 添加依赖
在 pubspec.yaml 中添加权限插件:
dependencies:
permission_handler: ^11.0.0
2. 配置 Android 权限
在 android/app/src/main/AndroidManifest.xml 中添加权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Android 13 新增的精确位置权限 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
3. 请求权限代码
import 'package:permission_handler/permission_handler.dart';
// 检查并请求定位权限
Future<void> requestLocationPermission() async {
// 检查当前权限状态
var status = await Permission.location.status;
if (status.isDenied) {
// 请求权限
status = await Permission.location.request();
if (status.isGranted) {
// 权限已授予
print("定位权限已获取");
} else if (status.isPermanentlyDenied) {
// 权限被永久拒绝,需要引导用户到设置中开启
openAppSettings();
}
}
}
4. 处理 Android 13 后台定位
如果需要后台定位,还需单独请求:
// 请求后台定位权限
if (await Permission.locationAlways.isGranted) {
// 已授权后台定位
} else {
await Permission.locationAlways.request();
}
注意事项:
- Android 13 将精确定位和模糊定位分离,需要明确声明用途
- 在
AndroidManifest.xml中建议添加权限说明:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
android:maxSdkVersion="32" />
建议在应用启动时或使用定位功能前调用权限请求,并妥善处理用户拒绝的情况。

