Flutter使用permission_handler请求位置权限报错:Manifest无权限[3]
解决Android 13中permission_handler请求位置权限报错“No permissions found in manifest for: []3”的问题
问题场景
Flutter 3环境下使用permission_handler: ^11.2.0包请求位置权限,已在AndroidManifest.xml中添加ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATION权限,但在Android 13设备测试时,出现错误提示No permissions found in manifest for: []3,权限无法正常授予。
解决方案
1. 完善AndroidManifest.xml权限配置
Android 13对位置权限体系做了细分,需根据应用需求补充对应权限声明:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.INTERNET"/> <!-- 基础前台位置权限 --> <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" android:maxSdkVersion="33" /> </manifest>
2. 适配Android版本的权限请求逻辑
Android 13要求后台位置权限必须在前台权限授予后才能请求,调整代码逻辑如下:
import 'package:permission_handler/permission_handler.dart'; import 'dart:io'; // 引入Platform判断 // ... PrimaryBtn( width: double.infinity, height: 55, buttonText: "获取位置权限", icon: 'assets/icons/map-pin.svg', iconSize: 35, onTap: () => checkLocationPermission(context), ), // ... Future<void> checkLocationPermission(BuildContext context) async { try { PermissionStatus status; if (Platform.isAndroid) { // 先请求前台位置权限 status = await Permission.locationWhenInUse.request(); // 若需后台权限,在前台权限授予后再请求 // if (status.isGranted) { // status = await Permission.locationAlways.request(); // } } else { status = await Permission.location.request(); } ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(status.isGranted ? "权限已授予" : "权限未授予"), duration: const Duration(seconds: 2), ), ); } catch (e) { print("请求权限出错: $e"); } }
3. 确保项目配置适配Android 13
打开android/app/build.gradle,将编译和目标SDK版本设置为33及以上:
android { compileSdkVersion 33 defaultConfig { // ...其他配置 targetSdkVersion 33 } }
4. 清理并重新构建项目
执行以下命令清除旧构建缓存,确保新配置生效:
flutter clean flutter pub get flutter run
错误原因说明
错误中的[]3对应permission_handler中Permission.location的枚举值,出现该提示的核心原因是:
- Android 13权限规则更新后,Manifest中权限声明不完整或与请求的权限类型不匹配
- 项目构建缓存残留旧配置,导致新权限声明未被加载
- 项目SDK版本未适配Android 13,权限系统无法正确识别声明
内容的提问来源于stack exchange,提问作者qawa3id قواعد
相关产品推荐
相关产品推荐

