【发布时间】: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 是您的应用程序第一次向用户请求权限,那么实际上它是
shouldShowRequestPermissionRationaletrue -> 2b,false -> 2a 或 2c。至于“我什么时候应该显示更多信息?”:当shouldShowRequestPermissionRationale返回true时。 -
是的,你是对的。 “真 -> 2b,假 -> 2a 或 2c”,但问题仍然存在。当 shouldShowRequestPermissionRetionale 返回 false 时怎么办?我怎么知道我是应该执行 2a 的操作(仅 als 权限)还是执行一个操作以禁用所选选项,因为用户真的不想授予权限 (2c)?
-
我看不出有什么问题。如果
checkSelfPermission说您当前没有权限,那么您首先调用shouldShowPermissionRationale。如果它返回 true,您可以根据需要显示一个基本原理对话框,否则您不需要。之后您调用requestPermissions,这可能会或可能不会触发系统对话框。当您收到onRequestPermissionsResult回调时,您要么调用需要权限的函数(如果已授予),要么不调用(如果未授予)。
标签: android permissions