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

Flutter权限异常求助:多位置权限仅Permission.locationAlways生效

解决permission_handler多位置权限仅locationAlways生效的问题

核心排查点(新建项目正常,问题肯定出在现有项目配置/逻辑里)

1. 检查AndroidManifest权限是否漏写

确保现有项目的AndroidManifest.xml中三个位置权限都已声明,少一个都不行:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

其中ACCESS_BACKGROUND_LOCATION对应Permission.locationAlways,另外两个分别对应Permission.location和Permission.locationWhenInUse,漏写会直接导致对应权限无法触发申请弹窗。

2. 权限申请顺序错了!

Android系统有强制要求:申请后台位置权限(locationAlways)前,必须先拿到前台位置权限(locationWhenInUse或location)的授权。如果直接同时申请三个权限,系统会跳过前台权限的申请流程,只弹出后台权限的弹窗,看起来就像只有locationAlways生效。

错误写法:

await [Permission.location, Permission.locationWhenInUse, Permission.locationAlways].request();

正确步骤:

// 先申请前台权限,比如locationWhenInUse
var frontStatus = await Permission.locationWhenInUse.request();
if (frontStatus.isGranted) {
  // 拿到前台权限后,再申请后台的locationAlways
  await Permission.locationAlways.request();
}

3. 清理缓存或排查配置冲突

  • 先执行flutter clean清除项目构建缓存,很多奇怪问题都是缓存导致的,清理后重新运行项目
  • 检查现有项目是否有其他权限管理插件、原生权限代码和permission_handler冲突
  • 对比新建项目的android/build.gradle,确保compileSdkVersion、targetSdkVersion和新建项目一致,permission_handler 10.4.3要求targetSdkVersion至少为33

4. iOS项目需检查Info.plist配置

如果是iOS项目,Info.plist里必须添加对应的权限描述,否则系统会直接拒绝权限申请:

<key>NSLocationWhenInUseUsageDescription</key>
<string>需要获取位置权限扫描WiFi</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>需要后台位置权限持续扫描WiFi</string>
<key>NSLocationUsageDescription</key>
<string>需要获取位置权限扫描WiFi</string>

总结

新建项目能正常申请所有权限,说明插件本身没问题,重点排查现有项目的权限配置、申请顺序和缓存问题,按上述步骤逐一验证即可解决。

内容的提问来源于stack exchange,提问作者李大龙

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:24:57