Com*_*are 31 android android-permissions
在 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| 行动 | 有精细许可吗? | 有粗略权限吗? | 提示罚款? | 提示粗略? |
|---|---|---|---|---|
| 启动应用程序 | 不 | 不 | 不 | 不 |
| 使用应用程序时单击按钮并授予大致位置 | 不 | 是的 | 不 | 不 |
| 再次单击按钮并选择“保留大致位置” | 不 | 是的 | 是的 | 不 |
| 第三次单击按钮并选择“保留大致位置” | 不 | 是的 | 不 | 不 |
虽然这些单独都有一定意义,但问题是第二个和第四个结果是相同的:
\n问题是,如果用户第四次尝试单击该按钮,我们将进入“不再询问”状态,并且不会出现权限对话框。之前所有的时间,都会出现一个权限对话框,要么最初授予权限,要么授予升级。我希望能够检测到第四次或更高版本的尝试,这样我就可以显示我自己的对话框,其中显示“抱歉,您现在需要转到“设置”并手动授予权限”。然而,除了自己跟踪请求数量之外,我不知道如何清楚地识别这种情况。
\n所以,我的问题是:有没有一种方法,使用一些现有的权限或位置API,来确定我不再被允许重新请求ACCESS_FINE_LOCATION,并且进一步的请求将导致立即失败?特别是,答案需要能够区分该表中的第二行和第四行,因此在“用户仅授予粗略访问权限”和“用户仅授予粗略访问权限,并且您尝试升级两次,用户每次都被拒绝”。
| 归档时间: |
|
| 查看次数: |
1306 次 |
| 最近记录: |