为什么RECEIVE_SMS和READ_SMS权限没有不同的提示框来请求权限?

时间:2018-02-06 02:56:21

标签: android android-permissions

我在应用的清单文件中列出了RECEIVE_SMS和READ_SMS的权限,并且它们都有不同的权限字符串。

授予相应的权限。但是,我注意到,在(由用户)授予任何一个权限(READ_SMSRECEIVE_SMS)时,我们可以执行这两项任务。我的问题是,如果它们都执行不同的任务:

1) READ_SMS它允许应用读取用户手机上的所有短信(当前存在)。

2) RECEIVE_SMS它允许应用在他/她使用应用时收听用户手机上收到的所有短信。

它们都显示相同的对话框,询问权限并拒绝其中一个权限,两个对话框都没有出现。

如果两者都有相同的权限授予方案,那么为什么它们以两种权限的形式分开?如果你们中的任何人能够帮助我理解这一点,那对我来说将是一个很大的帮助。

1 个答案:

答案 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权限组下的权限列表:

  • SEND_SMS
  • SEND_SMS
  • RECEIVE_SMS
  • READ_SMS
  • RECEIVE_WAP_PUSH
  • RECEIVE_MMS