升级到targetSdk 23或Android 6时,哪些权限不会保留?

背景

我记得(在Google的一个video中)告诉我们,如果以前版本的应用程序更新为在新版本上拥有targetSdk 23,则以前授予的所有权限将立即保留。

因此,例如,如果您安装了targetSdk 22的应用程序,需要从联系人中读取权限,那么即使在升级应用程序之后,仍然会以这种方式保留targetSdk 23。

原因很简单:用户在安装时已经授予了权限。

问题

根据我所发现的,这个规则有一个例外:

如果你的应用程序有权限SYSTEM_ALERT_WINDOW,现在你升级到targetSdk 23,它将被撤销(重置),你需要从用户请求它。

这种行为在文档中没有提及:

  • http://developer.android.com/reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW
  • http://developer.android.com/guide/topics/security/permissions.html
  • http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html
  • http://developer.android.com/about/versions/marshmallow/android-6.0.html

也不在我观看的任何video中。

关于SYSTEM_ALERT_WINDOW权限的唯一提及是,您需要以不同的方式处理它们,使用ACTION_MANAGE_OVERLAY_PERMISSION请求权限, Settings.canDrawOverlays(…)检查权限是否被授予

我试过了

我试图联系谷歌有关这个问题,他们说这是故意的:

我和开发团队交谈过,你所看到的行为正在按照预期工作。 这是logging在这里: http : //developer.android.com/reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW

在Android M中提出了SYSTEM_ALERT_WINDOW的保护级别。

问题

  1. 是否有其他权限有这种行为?

  2. 如果应用程序的targetSdk为22/23,并且操作系统升级到Android 6,会发生什么情况? 将SYSTEM_ALERT_WINDOW(或任何其他权限)被撤销?

  3. 相当肯定其他的东西将保持批准,但我仍然要问:那么其他类似特殊权限的function,如:SAF,pipe理,使用访问,可访问性访问,通知访问…?


编辑:关于#2,这是谷歌的答案(链接在这里 ):

在OS升级的应用程序应该保持SYSTEM_ALERT_WINDOW。 预API 23应用程序默认情况下具有权限,而API 23应用程序默认处于closures状态。 但是,有一个已知的错误,即API 23应用程序在升级时正在丢失SYSTEM_ALERT_WINDOW。 开发人员的build议是始终在开始时检查SYSTEM_ALERT_WINDOW的状态,如果不授予,则将用户指向“设置”。 我们将在未来的版本中解决这个问题。

Solutions Collecting From Web of "升级到targetSdk 23或Android 6时,哪些权限不会保留?"