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

Expo Managed流程添加ACCESS_BACKGROUND_LOCATION权限仍报错如何解决?

这个问题不是Expo官方bug,绝大多数情况是权限申请顺序错误或配置未生效导致的,可按以下步骤排查解决:

  • 首先修正权限申请逻辑:安卓10及以上系统要求必须先获取前台定位权限,才能申请后台定位权限,直接申请后台权限会抛出你遇到的报错,和manifest配置无关。正确的代码示例:
try {
  // 第一步:先申请前台定位权限
  const foregroundRes = await Location.requestForegroundPermissionsAsync();
  if (foregroundRes.status !== 'granted') {
    console.log('前台定位权限未授权,无法申请后台权限');
    return;
  }
  // 第二步:前台权限通过后,再申请后台定位权限
  const backgroundRes = await Location.requestBackgroundPermissionsAsync();
  if (backgroundRes.status === 'granted') {
    // 后续业务逻辑
  }
} catch (error) {
  console.log(error);
}
  • 确认配置生效:
    • 检查app.config.json的层级是否正确,android字段必须嵌套在顶层的expo字段内,正确配置示例:
    {
      "expo": {
        "name": "你的应用名称",
        "slug": "你的应用slug",
        "android": {
          "permissions": [
            "ACCESS_BACKGROUND_LOCATION",
            "ACCESS_COARSE_LOCATION",
            "ACCESS_FINE_LOCATION"
          ]
        }
      }
    }
    
    • 每次修改权限配置后,必须重新构建安卓安装包,旧的安装包不会自动更新manifest配置。不要使用Expo Go客户端测试后台定位权限,Expo Go本身未声明该权限,一定会触发报错。
  • 验证权限是否成功写入安装包:可使用aapt工具检查构建出的apk的权限声明,执行命令aapt dump permissions 你的安装包路径.apk,查看输出中是否包含android.permission.ACCESS_BACKGROUND_LOCATION,如果存在说明配置已生效,问题出在申请逻辑;如果不存在则重新检查配置后再次构建。
  • 补充说明:「新版Android仅允许配置精确定位或后台定位中的一个」的说法是错误的,后台定位权限必须搭配前台定位权限一起使用,不需要移除精确定位配置。

内容的提问来源于stack exchange,提问作者ayman_rahmon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:36:01