You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 قواعد

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:13:14