如何知道用户在调用 requestPermissions 之前检查 "Never ask again"

How to know user check "Never ask again" before calling requestPermissions

我想知道,如何知道用户在调用 requestPermissions 之前检查 "Never ask again"。

我已经经历了,但还没有找到合适的解决方案。

在此之前,请允许我解释一下我的动机。

我有以下反馈对话框。

当用户勾选回复我 明确,如果权限还没有被授予,我将执行requestPermissions。可能有3种可能的结果。

第一个结果。第一次调用 requestPermissions 时发生

第二个结果。第二次或更多次调用 requestPermissions 时发生

第三个结果。当用户勾选 "Never ask again"

时发生

不会显示任何对话框。 requestPermissions永远不会弹出任何对话框。我需要代表用户取消勾选复选框,因为 onRequestPermissionsResult 会告诉我权限被拒绝。

第三个结果会产生糟糕的用户体验。当用户勾选复选框时,它会立即取消勾选。

我想在显示反馈表之前隐藏回复我。为此,我需要知道用户是否已经检查 "Never ask again".

shouldShowRequestPermissionRationale 没有多大帮助。因为,shouldShowRequestPermissionRationale 将 return 在 2 种情况下为假

  1. 用户已经检查过"Never ask again"。
  2. requestPermissions 之前从未调用过。

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

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