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
相关产品推荐
相关产品推荐

