【问题标题】:Asking for permissions请求权限
【发布时间】:2019-01-20 21:30:51
【问题描述】:

我发现处理来自 android M 及更高版本的授权缺少一些东西。或者至少谷歌对此有其他想法,然后我有。 在我的授权推理中,有 4 个选项:

1 个应用拥有权限
2个应用没有权限

2a 从未询问过用户

2b 用户已拒绝

2c 用户已拒绝 + 选中“不再询问”-框。

在 1 和 2 之间进行检查很容易。但随后开始,因为只有 1 种方法可用于检查 2a、2b 和 2c 之间。那么....这个方法如何返回一个布尔值? 使用该方法,您可以检查 2b 场景,但您不知道(如果结果 = true)它是 2a 还是 2c。

一个选项是谷歌希望我们不断地询问用户,即使用户选中了“不再询问”框。 这似乎没问题,您需要应用程序核心选项的权利。但是在我的情况下,需要额外的权利。

到目前为止,我发现的唯一选择是将数据保存在应用数据中,这样我就可以检查 4 种不同的状态。有没有人有更聪明的主意。

【问题讨论】:

  • “谷歌希望我们不断询问用户,即使用户选中了“不再询问”-框” requestPermissions 不会触发对话框如果用户之前选择了“不再询问”。
  • Michael 感谢您的快速响应。我理解你的回答,但这并不完全有助于满足。让我试着说得更清楚。根据文档,它说:方法 shouldShowRequestPermissionRationale(),如果用户先前拒绝了请求,则返回 true,如果用户拒绝了权限并在权限请求对话框中选择了不再询问选项,则返回 false ,或者如果设备策略禁止该权限。所以就像我说的:false 是 2c,但 true 是 2a 或 2b,那么我什么时候应该显示更多信息?
  • 如果 2a 是您的应用程序第一次向用户请求权限,那么实际上它是 shouldShowRequestPermissionRationale true -> 2b,false -> 2a 或 2c。至于“我什么时候应该显示更多信息?”:当shouldShowRequestPermissionRationale返回true时。
  • 是的,你是对的。 “真 -> 2b,假 -> 2a 或 2c”,但问题仍然存在。当 shouldShowRequestPermissionRetionale 返回 false 时怎么办?我怎么知道我是应该执行 2a 的操作(仅 als 权限)还是执行一个操作以禁用所选选项,因为用户真的不想授予权限 (2c)?
  • 我看不出有什么问题。如果checkSelfPermission 说您当前没有权限,那么您首先调用shouldShowPermissionRationale。如果它返回 true,您可以根据需要显示一个基本原理对话框,否则您不需要。之后您调用requestPermissions,这可能会或可能不会触发系统对话框。当您收到onRequestPermissionsResult 回调时,您要么调用需要权限的函数(如果已授予),要么不调用(如果未授予)。

标签: android permissions


【解决方案1】:

感谢迈克尔,我找到了错误的地方。 我的错误在于,当用户选中“不再询问”框时,Android(Google)没有显示 requestPermission 对话框,即使您对其进行编程也是如此。 我的下一个错误是我如何在知道没有许可的情况下获得“假” 但即使没有显示对话框,android 也会执行 onRequestPermissionsResult 方法。

再次感谢迈克尔

【讨论】:

  • 我在以前的应用程序中所做的是在每个 Activity 开始时检查是否授予了适当的权限(即收集一个布尔值以查看是否允许权限,而不是特别担心显示的对话框用户,因为如果他们选择不看到通知,您将无法始终控制它)。如果未授予权限,请加载您的 Activity 的受限版本,说明需要权限(Uber 会在您请求乘车之前检查 GPS 是否启用)。如果授予权限,则显示您的正常活动。
猜你喜欢
  • 1970-01-01
  • 2018-07-29
  • 2015-08-23
  • 1970-01-01
  • 2013-09-14
  • 2016-08-17
  • 2016-07-31
  • 2019-08-01
相关资源
最近更新 更多