12

背景

我记得有人告诉(在 Google 的一个视频中),如果应用程序的先前版本更新为在新版本上具有 targetSdk 23,那么之前授予的所有权限 - 现在将保持授予状态。

因此,例如,如果您安装了一个具有 targetSdk 22 的应用程序,这需要从联系人读取的权限,那么即使在应用程序升级到具有 targetSdk 23 的应用程序之后,它也会保持这种状态。

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

问题

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

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

文档中的任何地方都没有提到这种行为:

而且在我看过的任何视频中也没有。

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

我试过的

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

我与开发团队进行了交谈,您看到的行为正在按预期工作。这记录在这里: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. 很确定其他东西会被授予,但我还是想问一下:其他特殊权限之类的功能呢,例如:SAF、管理员、使用权限、可访问性访问、通知访问……?


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

在操作系统升级时,应用程序应保留 SYSTEM_ALERT_WINDOW。Pre-API 23 应用程序默认具有权限,而 API 23 应用程序默认关闭。但是,有一个已知的错误,即对于 API 23 应用程序,它们在升级时会丢失 SYSTEM_ALERT_WINDOW。对开发人员的建议是始终在启动时检查 SYSTEM_ALERT_WINDOW 的状态,如果未授予,则将用户定向到设置。我们将在未来的版本中修复该问题。

4

0 回答 0