我在应用的清单文件中列出了RECEIVE_SMS和READ_SMS的权限,并且它们都有不同的权限字符串。
授予相应的权限。但是,我注意到,在(由用户)授予任何一个权限(READ_SMS
或RECEIVE_SMS
)时,我们可以执行这两项任务。我的问题是,如果它们都执行不同的任务:
1) READ_SMS
:它允许应用读取用户手机上的所有短信(当前存在)。
2) RECEIVE_SMS
:它允许应用在他/她使用应用时收听用户手机上收到的所有短信。
它们都显示相同的对话框,询问权限并拒绝其中一个权限,两个对话框都没有出现。
如果两者都有相同的权限授予方案,那么为什么它们以两种权限的形式分开?如果你们中的任何人能够帮助我理解这一点,那对我来说将是一个很大的帮助。
答案 0 :(得分:5)
根据Android documentation on Requesting Permissions:
许可组:
所有危险的Android系统权限都属于权限组。如果设备运行的是Android 6.0(API级别23)且应用的targetSdkVersion为23或更高,则当您的应用请求危险权限时,以下系统行为适用:如果应用请求其清单中列出的危险权限,并且该应用当前在权限组中没有任何权限,系统会向用户显示一个对话框,描述该应用想要访问的权限组。 该对话框未描述该组中的特定权限。例如,如果应用程序请求READ_CONTACTS权限,系统对话框只会说应用程序需要访问设备的联系人。如果用户授予批准,系统将为应用程序提供其请求的权限。
如果应用程序请求其清单中列出的危险权限,并且该应用程序已在同一权限组中具有其他危险权限,则系统会立即授予权限,而不与用户进行任何交互。例如,如果应用程序先前已请求并已获得READ_CONTACTS权限,然后它请求WRITE_CONTACTS,则系统会立即授予该权限。警告:未来版本的Android SDK可能会将特定权限从一个组移动到另一个组。因此,请不要将应用程序的逻辑基于这些权限组的结构。 例如,如果您的应用请求READ_CONTACTS权限,然后是WRITE_CONTACTS权限,则不应假设系统可以自动授予WRITE_CONTACTS权限,即使它与Android 8.0中的READ_CONTACTS属于同一权限组(API级别26)
所有与SMS相关的权限都属于权限组SMS
以下是SMS权限组下的权限列表: