【问题标题】:How to know user check "Never ask again" before calling requestPermissions如何在调用 requestPermissions 之前知道用户检查“不再询问”
【发布时间】: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

  1. 用户已勾选“不再询问”。
  2. requestPermissions 以前从未被调用过。

我找不到区分两者的方法。

【问题讨论】:

  • 似乎没有简单的方法,但在您的情况下,您可能会在显示对话框之前先寻求许可。然后您可以根据权限检查的结果来决定是否显示该选项。
  • 我尽量避免在显示反馈对话框之前询问权限。因为这可能会造成不愉快的用户体验。用户会想知道为什么我需要提供联系人信息才能显示反馈对话框。
  • 如果您在单独的对话框中还没有权限,则另一种方法是将“回复我”问题分开 - 在这种情况下,您可以在反馈对话框之后提出问题并且权限是的确。可能不那么奇怪,但可能存在连续对话太多的问题...
  • 在此链接上找到的最佳解决方案:https://stackoverflow.com/a/33514501/4156299

标签: android android-permissions android-6.0-marshmallow


【解决方案1】:

当您请求许可时,将布尔值 shared preference 保存为 true。然后,您将能够检查它的值,以了解您是否已经请求许可,并知道 shouldShowRequestPermissionRationale() 是否返回 false,因为您之前从未询问过,或者因为他们说再也不会,或者因为权限被禁用设备政策。

【讨论】:

  • 但请注意shouldShowRequestPermissionRationale()的结果可能会被重置,如果用户在应用程序之外切换权限 - code.google.com/p/android-developer-preview/issues/…
  • 我可以在共享偏好中设置一个标志,以跟踪是否勾选了“不再询问”。但是,它是否有可能与实际系统价值不同步?这意味着,用户可以在应用程序外清除“不再询问”系统标志。然而,在共享偏好中保留“不再询问”标志的真实价值?
  • 这太荒谬了,开发者必须注意系统本身强加的东西。
  • 查看此答案,了解在请求权限时检查您所处的场景的好方法:stackoverflow.com/a/52596674/753964
猜你喜欢
  • 2016-05-13
  • 1970-01-01
  • 2013-06-20
  • 2021-10-28
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多