当涉及到M开发者预览运行时权限时,根据Google的说法:
- 如果您以前从未请求过某个权限,请直接请求该权限。
- 如果您之前已经请求过,并且用户拒绝了请求,而用户现在尝试执行需要被拒绝的权限的操作,则应提示用户解释为什么需要该权限,然后再次请求该权限。
- 如果您之前请求了几次,并且用户已经说“不要再问了”(通过运行时权限对话框上的复选框),则应停止打扰(例如,禁用需要该权限的UI)。
shouldShowRequestPermissionRationale()
,返回一个boolean
,而我们有三种状态。我们需要一种方法来区分从未请求的状态和停止请求的状态,因为我们从shouldShowRequestPermissionRationale()
中获得false
。
对于应用程序首次运行时请求权限,这不是一个大问题。有很多方法可以确定这可能是您的应用程序的第一次运行(例如,在SharedPreferences
中的boolean
值),因此,如果这是您的应用程序的第一次运行,则认为您处于从未询问的状态。
然而,运行时权限的愿景之一是您可能不会一开始就请求所有权限。与边缘功能相关的权限可能只在以后才会请求,当用户点击需要该权限的内容时才会请求。在这种情况下,应用程序可能已经运行了很多次,几个月之久,然后我们突然需要请求另一个权限。
在这些情况下,我们应该跟踪我们是否自己请求了权限吗?还是我错过了Android M API中告诉我们先前是否请求过的某些东西?
SharedPreferences
可能与Android自身存储的权限信息不同步。在运行时权限方面,Android是“记录系统”。它显然拥有这些信息,否则它将无法从shouldShowRequestPermissionRationale()
返回true
。我只是想看看是否有一些我错过的方法被添加了。 - CommonsWareshouldShowRequestPermissionRationale()
并添加一个返回int
值的新方法。 - Kevin Krumwiede