定位权限
api版本 | 权限 | 使用说明 |
---|---|---|
<23 | ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION |
无需动态请求,直接注册使用位置权限 可后台运行 |
>=23 < 29 | ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION |
需要动态请求权限,有“允许” / “拒绝”选项 可后台运行 |
>=29 | ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION |
需要动态请求权限,有“始终允许” /“使用时允许”/ ”拒绝” 选项 只能前台运行 |
>=29 | ACCESS_BACKGROUND_LOCATION | 需要动态请求权限,有“允许” / ”拒绝” 选项 可后台运行,申请此权限要同时申请或已申请到ACCESS_COARSE_LOCATION 或ACCESS_FINE_LOCATION至少一种后台执行定位方能成功 |
>=30 | ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION |
需要动态请求权限,有“使用时允许” /“仅本次使用时允许”/ ”拒绝” 选项 只能前台运行(注意:无“始终允许”权限了) |
>=30 | ACCESS_BACKGROUND_LOCATION | 需要动态请求权限申请,此权限需要已申请到ACCESS_COARSE_LOCATION 或ACCESS_FINE_LOCATION至少一种后台执行定位方能申请,申请时不会弹对话窗和任何其它提示,会直接拉起应用的定位权限设置 |
ACCESS_BACKGROUND_LOCATION补充说明:
1.targetSdkVersion<29时,申请了两前台权限,则默认给予也有后台权限;若在<29的系统版本调用单独申请ACCESS_BACKGROUND_LOCATION,则会总是拒绝状态(无论是判断还是申请),申请也不会弹权限框。因此需要判断系统版本来决定调不调BACKGROUND权限申请
2.targetSdkVersion>=29时,后台权限需要前台权限至少有一个权限申请且被同意了,才可以单独申请后台权限,如果没有获得ACCESS_COARSE_LOCATION 或ACCESS_FINE_LOCATION至少一种权限,而直接只申请ACCESS_BACKGROUND_LOCATION则系统不会展示权限申请框,回调权限标为拒绝
3.targetSdkVersion>=29时,如果ACCESS_COARSE_LOCATION 或ACCESS_FINE_LOCATION至少一种权与ACCESS_BACKGROUND_LOCATION同时申请,当用户选“使用时允许”时,则BACKGROUND权限会被标为拒绝返回。若用户选“允许”、
解决用户选择使用时允许的办法,是再拒绝时再次申请权限,系统弹出“后台定位”告之用户。
// for... 得出 denied permissions
String[] deniedPermissions = xxxx;
if (deniedPermissions .length == 1 && Manifest.permission.ACCESS_BACKGROUND_LOCATION.equals(permissions[0]) {
requestPermission(activity, new String[]{Manifest.permission.ACCESS_BACKGROUND_LOCATION}, REQ_ONLY_BACKGROUND);
}
4.targetSdkVersion>=30时,前台申请权限取消了“始终允许”选项,因此将后台权限与前台权限一起申请,则一定会有后台权限被拒的回调。因此后台权限需要在有前台权限的情况下,再单独申请
——————————————————————————————————————————
如果该文章对您有用,请点个赞;如果对该文章有任何意见及不解之处请留言;谢谢翻阅!!!
——————————————————————————————————————————