仅申请ACCESS_COARSE_LOCATION权限无法获取最低精度定位问题排查
可能的原因
- 本地测试权限残留:你本地设备之前安装过包含
ACCESS_FINE_LOCATION权限的旧版应用,Android系统会保留已授予的权限状态不会自动回收,所以本地测试时实际还是有精定位权限可用,功能自然正常。而从应用商店下载安装的新包,只会申请你配置的粗略定位权限,就触发了实际的权限缺失问题。 - Expo SDK 40 底层实现缺陷:该版本的
expo-location库存在已知逻辑问题,即便你显式传入了LocationAccuracy.Lowest的低精度参数,底层Java实现还是会默认校验ACCESS_FINE_LOCATION权限,没有该权限的情况下会直接抛出权限异常或返回空结果,不会主动降级到粗略定位逻辑。 - 构建配置未同步:你移除
ACCESS_FINE_LOCATION权限后,没有在app.json的expo.android.permissions字段中显式声明仅保留ACCESS_COARSE_LOCATION,Expo SDK 40的默认构建逻辑会自动为所有用到定位能力的项目注入ACCESS_FINE_LOCATION权限,部分应用商店在审核时如果发现你没有对应的精定位用途说明,会主动将该权限从你的安装包中移除,导致最终分发的包权限配置混乱。 - 系统定位服务限制:部分定制安卓ROM或安卓12及以上版本中,用户如果在系统设置中全局关闭了精定位开关,仅开启粗略定位的情况下,应用即便申请了
ACCESS_COARSE_LOCATION权限,也可能无法获取到定位结果。
可行的修复方案
- 先完全卸载本地设备上的测试应用,重新安装无
ACCESS_FINE_LOCATION权限的安装包复现问题,确认不是权限残留导致。 - 升级
expo-location到兼容低精度定位的版本,或者在Android原生层做权限适配,强制底层定位逻辑仅使用网络定位提供商,不需要精定位权限。 - 在
app.json中显式配置需要的权限,避免Expo自动注入多余权限:
{ "expo": { "android": { "permissions": ["ACCESS_COARSE_LOCATION"] } } }
内容的提问来源于stack exchange,提问作者Noitidart
相关产品推荐
相关产品推荐

