在 Android 12 中,如果应用程序通过以下方式请求精细位置权限ACCESS_FINE_LOCATION,用户可能会选择仅授予粗略位置权限。不幸的是,并非所有 API 都可以使用粗略位置权限 \xe2\x80\x94,特别是 AFAICT,要查找已连接 WiFi 网络的 SSID,我们需要精细位置权限,而不是粗略位置权限。
如果您重新请求精细位置权限,系统将要求用户升级您的访问权限,但用户可能会拒绝。因此,我们需要一种方法来优雅地确定用户授予了我们粗略位置权限,并且我们仍然有资格请求升级。
\n这个示例项目只有一个按钮来触发requestPermissions()forACCESS_FINE_LOCATION,以及四个要报告的标签:
checkSelfPermission()为了ACCESS_FINE_LOCATION)checkSelfPermission()为了ACCESS_COARSE_LOCATION)shouldShowRequestPermissionRationale()为了ACCESS_FINE_LOCATION)shouldShowRequestPermissionRationale()为了ACCESS_COARSE_LOCATION)在运行 Android 12 最终测试版的 Pixel 3a XL 上全新安装后运行此命令,在执行列出的操作序列后,我得到以下结果:
\n| 行动 | 有精细许可吗? | 有粗略权限吗? | 提示罚款? | 提示粗略? |
|---|---|---|---|---|
| 启动应用程序 | 不 | 不 | 不 | 不 |
| 使用应用程序时单击按钮并授予大致位置 | 不 | 是的 | 不 | 不 |
| 再次单击按钮并选择“保留大致位置” | 不 | 是的 | 是的 | 不 … |