在Android 12中,如果应用程序通过ACCESS_FINE_LOCATION
请求精细定位权限,用户可能会选择只授予粗定位权限。不幸的是,并不是所有的api都使用粗略的位置权限-特别是AFAICT,要查找连接的WiFi网络的SSID,我们需要精细的位置权限,而不是粗略的位置权限。
如果您重新请求精细位置权限,用户将被要求升级您的访问权限,但用户可能会拒绝。因此,我们需要一种方法来优雅地确定用户授予了我们粗略的位置权限,并且我们仍然有资格请求升级。
这个示例项目只有一个按钮来触发ACCESS_FINE_LOCATION
的requestPermissions()
,以及四个标签来报告:
- 我们是否获得了精细定位许可?(
checkSelfPermission()
forACCESS_FINE_LOCATION
) 我们是否获得了粗定位许可?( - 我们是否应该提示用户请求的理由,以获得良好的许可?(
shouldShowRequestPermissionRationale()
forACCESS_FINE_LOCATION
) - 我们是否应该提示用户请求的基本原理,以获得粗略的许可?(
shouldShowRequestPermissionRationale()
forACCESS_COARSE_LOCATION
)
checkSelfPermission()
forACCESS_COARSE_LOCATION
)运行这个全新安装后一个像素3 XL运行Android的最后β12日上市后我得到以下的结果序列的动作:
有Fine权限吗?有粗权限?粗提示?更新:
根据问题跟踪器,该问题已于2021年12月7日修复
标记为固定。这个问题已经修复,并将在未来的版本中提供。