如何在AndroidManifest.xml中配置适配Android7-12的后台定位权限
Android 7-12 定位权限Manifest配置指南
是否需要同时声明3项定位权限
要不要加全3个权限完全取决于你的应用定位使用场景,和系统版本适配没有强制绑定关系:
- 仅在应用前台活跃时使用定位(比如打开页面才查当前位置、退到后台就停止定位):只需要声明
ACCESS_COARSE_LOCATION、ACCESS_FINE_LOCATION2项权限即可,不需要额外加后台定位权限 - 应用退到后台、锁屏状态下仍然需要持续获取定位(比如轨迹记录、位置打卡类场景):才需要加上
ACCESS_BACKGROUND_LOCATION权限。该权限是Android 10(API 29)才新增的,Android 7-9系统会自动忽略不识别的权限声明,不会引发兼容性问题。
正确的Manifest配置示例
仅前台定位场景
直接在<manifest>标签下添加以下权限声明即可,覆盖Android 7到12全版本:
<!-- 粗略定位权限,全适配版本生效 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 精确定位权限,全适配版本生效 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
含后台定位需求场景
如果需要后台定位能力,添加3项权限即可,可通过minSdkVersion规避代码lint提示:
<!-- 粗略定位权限,全适配版本生效 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 精确定位权限,全适配版本生效 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 后台定位权限,仅Android 10及以上版本生效,低版本自动忽略 --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" android:minSdkVersion="29" />
适配注意事项
- Android 12(API 31/32)新增了近似定位选项,即使用户同意授权,若只申请
ACCESS_COARSE_LOCATION,或用户手动选择仅给近似定位权限,应用只能拿到精度在1-3公里范围的模糊位置,要获取米级精确定位必须声明ACCESS_FINE_LOCATION- Android 11(API 30)及以上版本,后台定位权限不支持在应用内直接弹出系统申请框,必须先拿到前台定位权限后,再引导用户跳转到应用的系统权限设置页,手动选择「始终允许」才能拿到后台定位授权
- 无真实后台定位需求不要随意声明
ACCESS_BACKGROUND_LOCATION,主流应用商店对该权限审核非常严格,没有合理的使用场景说明会直接被拒审上架
内容的提问来源于stack exchange,提问作者Young Calabria
相关产品推荐
相关产品推荐

