如何确定我们是否可以在Android 12中请求位置权限升级?



在Android 12中,如果应用程序通过ACCESS_FINE_LOCATION请求精细定位权限,用户可能会选择只授予粗定位权限。不幸的是,并不是所有的api都使用粗略的位置权限-特别是AFAICT,要查找连接的WiFi网络的SSID,我们需要精细的位置权限,而不是粗略的位置权限。

如果您重新请求精细位置权限,用户将被要求升级您的访问权限,但用户可能会拒绝。因此,我们需要一种方法来优雅地确定用户授予了我们粗略的位置权限,并且我们仍然有资格请求升级。

这个示例项目只有一个按钮来触发ACCESS_FINE_LOCATIONrequestPermissions(),以及四个标签来报告:

  • 我们是否获得了精细定位许可?(checkSelfPermission()forACCESS_FINE_LOCATION)
  • 我们是否获得了粗定位许可?(checkSelfPermission()forACCESS_COARSE_LOCATION)
  • 我们是否应该提示用户请求的理由,以获得良好的许可?(shouldShowRequestPermissionRationale()forACCESS_FINE_LOCATION)
  • 我们是否应该提示用户请求的基本原理,以获得粗略的许可?(shouldShowRequestPermissionRationale()forACCESS_COARSE_LOCATION)

运行这个全新安装后一个像素3 XL运行Android的最后β12日上市后我得到以下的结果序列的动作:

有Fine权限吗?有粗权限?粗提示?启动app再次点击按钮,选择"保持大致位置">第三次点击按钮,选择"保持大致位置">

更新:

根据问题跟踪器,该问题已于2021年12月7日修复

标记为固定。这个问题已经修复,并将在未来的版本中提供。

最新更新