【发布时间】:2016-04-07 00:45:06
【问题描述】:
我想知道,如何知道用户在致电requestPermissions 之前勾选“不再询问”。
我已经通过Android M - check runtime permission - how to determine if the user checked "Never ask again"?,但还没有找到合适的解决方案。
在此之前,请允许我解释一下我的动机。
我有以下反馈对话框。
当用户勾选回复我 明确,如果权限尚未授予,我将执行requestPermissions。可能有 3 种可能的结果。
第一个结果。第一次调用requestPermissions 时发生
第二个结果。在第二次或更长时间调用requestPermissions 时发生
第三个结果。当用户勾选“不再询问”时发生
不会显示任何对话框。 requestPermissions 永远不会弹出任何对话框。我需要代表用户取消勾选复选框,因为onRequestPermissionsResult 会告诉我权限被拒绝。
第三个结果将产生糟糕的用户体验。当用户勾选复选框时,它会立即取消勾选。
我想在显示反馈表单之前隐藏回复我。为此,我需要知道用户是否已经选中“不再询问”。
shouldShowRequestPermissionRationale 没有多大帮助。因为,shouldShowRequestPermissionRationale 在 2 种情况下会返回 false
- 用户已勾选“不再询问”。
-
requestPermissions以前从未被调用过。
我找不到区分两者的方法。
【问题讨论】:
-
似乎没有简单的方法,但在您的情况下,您可能会在显示对话框之前先寻求许可。然后您可以根据权限检查的结果来决定是否显示该选项。
-
我尽量避免在显示反馈对话框之前询问权限。因为这可能会造成不愉快的用户体验。用户会想知道为什么我需要提供联系人信息才能显示反馈对话框。
-
如果您在单独的对话框中还没有权限,则另一种方法是将“回复我”问题分开 - 在这种情况下,您可以在反馈对话框之后提出问题并且权限是的确。可能不那么奇怪,但可能存在连续对话太多的问题...
-
在此链接上找到的最佳解决方案:https://stackoverflow.com/a/33514501/4156299
标签: android android-permissions android-6.0-marshmallow