Android R 11 后台定位权限没有 始终允许选项的解决方法

在接入百度定位SDK 时,看到文档上说要注意android 11的权限相关问题,果然是个坑,在Android 10 11 上都出现一些问题,本文记录解决 android 11 定位权限问题的方法

申请不了后台定位

android 11 有不同的定位策略,前台权限和后台权限:

这里有2种场景,第一种情况是当仅请求前台权限,在这种情况下,我们通常使用ACCESS_FINE_LOCATION 或者ACCESS_COARSE_LOCATION, 但是,请求授权的弹窗和以前的略有不同,在Android 11 中,Google 增加了一个可选项 允许本次
请注意,即使将ACCESS_BACKGROUND_LOCATION添加到要请求的权限列表中,系统也将忽略它。

第二种情况是:应用也需要后台权限,为此,你必须准备自己的对话框,并使用明确的消息来说明后台位置的使用。

当用户同意后,将他引导到应用设置页面,那里可以选择他想授予的权限等级。


显然问题是出现在了后台权限上

去系统设置页检查权限的时候:
这是我的DEMO:
Android R 11 后台定位权限没有 始终允许选项的解决方法_第1张图片
这是高德地图:Android R 11 后台定位权限没有 始终允许选项的解决方法_第2张图片
可以看到,高德地图比我的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);
            // 注意,不会有系统弹框,需要我们自己写代码,让用户跳转到设置页面去选择

此时就会有 始终允许 的选项了!

你可能感兴趣的:(踩坑,java,android,安卓)