在接入百度定位SDK 时,看到文档上说要注意android 11的权限相关问题,果然是个坑,在Android 10 11 上都出现一些问题,本文记录解决 android 11 定位权限问题的方法
申请不了后台定位
android 11 有不同的定位策略,前台权限和后台权限:
这里有2种场景,第一种情况是当仅请求前台权限 ,在这种情况下,我们通常使用ACCESS_FINE_LOCATION 或者ACCESS_COARSE_LOCATION, 但是,请求授权的弹窗和以前的略有不同,在Android 11 中,Google 增加了一个可选项 允许本次 请注意,即使将ACCESS_BACKGROUND_LOCATION添加到要请求的权限列表中,系统也将忽略它。
第二种情况是:应用也需要后台权限 ,为此,你必须准备自己的对话框,并使用明确的消息来说明后台位置的使用。
当用户同意后,将他引导到应用设置页面,那里可以选择他想授予的权限等级。
显然问题是出现在了后台权限上
去系统设置页检查权限的时候: 这是我的DEMO: 这是高德地图: 可以看到,高德地图比我的DEMO 多了一个始终允许。
解决方法
第一步: ManiFest.xml 中声明后台定位权限!!!
<!-- Android 11 必须加后台定位权限,否则不会出现始终允许-->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
第二步:java 代码请求后台定位权限
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.R)
requestPermission.launch(Manifest.permission.ACCESS_BACKGROUND_LOCATION);
此时就会有 始终允许 的选项了!
|