官网:https://developer.android.com/about/versions/11/privacy/permissions#audit-by-feature
Android 11 使用户能够为位置、麦克风和摄像头指定更精细的权限。此外,系统会重置针对 Android 11 或更高版本的未使用应用程序的权限,如果应用程序使用系统警报窗口或读取与电话号码相关的信息,则可能需要更新它们声明的权限。
一次性权限
从 Android 11 开始,每当您的应用请求与位置、麦克风或摄像头相关的权限时,面向用户的权限对话框都会包含一个名为Only this time的选项。如果用户在对话框中选择此选项,您的应用将被授予临时的一次性权限。
详细了解系统如何处理一次性权限。
注意:如果您的应用在请求运行时权限时已经遵循了最佳实践,则无需更改您的应用以支持一次性权限。
自动重置未使用应用程序的权限
如果您的应用以 Android 11 或更高版本为目标平台并且几个月未使用,系统会通过自动重置用户授予您的应用的敏感运行时权限来保护用户数据。此操作与用户查看系统设置中的权限并将您的应用程序的访问级别更改为Deny具有相同的效果。如果您的应用程序遵循 在运行时请求权限的最佳做法,则您不需要对您的应用程序进行任何更改。这是因为,当用户与应用程序中的功能交互时,您应该验证这些功能是否具有他们需要的权限。
注意:系统仅重置运行时权限,即在请求时向用户显示运行时提示的权限。
详细了解系统如何自动重置未使用应用的权限。
权限对话框可见性
从 Android 11 开始,如果用户在您的应用在设备上的安装生命周期内多次点击拒绝特定权限,则当您的应用再次请求该权限时,用户不会看到系统权限对话框。用户的动作暗示“不要再问了”。在以前的版本中,每次您的应用程序请求权限时,用户都会看到系统权限对话框,除非用户之前选择了“不再询问”复选框或选项。Android 11 中的这种行为变化不鼓励重复请求用户选择拒绝的权限。
注意:如果您的应用已遵循与权限相关的最佳实践,则无需更改您的应用即可支持此行为更改。
详细了解如何处理应用程序中的权限拒绝。
系统警报窗口更改
Android 11 对应用授予权限的方式进行了多项更改 SYSTEM_ALERT_WINDOW 。这些更改旨在通过更有意识地授予权限来保护用户。
某些应用会根据请求自动授予 SYSTEM _ ALERT _ WINDOW 权限
某些类别的应用程序会根据请求自动授予权限SYSTEM_ALERT_WINDOW :
任何具有 ROLE_CALL_SCREENING 和请求的应用程序SYSTEM_ALERT_WINDOW都会自动授予权限。如果应用程序丢失ROLE_CALL_SCREENING,它将失去权限。
MediaProjection 任何通过 a和请求捕获屏幕的应用程序 SYSTEM_ALERT_WINDOW都会自动授予该权限,除非用户明确拒绝该应用程序的权限。当应用程序停止捕获屏幕时,它会失去权限。此用例主要用于游戏直播应用。
这些应用无需发送 ACTION_MANAGE_OVERLAY_PERMISSION 即可获得SYSTEM_ALERT_WINDOW权限;应用程序可以 SYSTEM_ALERT_WINDOW直接请求。
MANAGE _ OVERLAY _ PERMISSION 意图总是将用户带到系统权限屏幕
从 Android 11 开始, ACTION_MANAGE_OVERLAY_PERMISSION intents 始终将用户带到顶级设置屏幕,用户可以在其中授予或撤销 SYSTEM_ALERT_WINDOW 应用程序的权限。package:意图中的任何数据都将被忽略。
在早期版本的 Android 中,ACTION_MANAGE_OVERLAY_PERMISSION意图可以指定一个包,它将用户带到特定于应用程序的屏幕以管理权限。Android 11 不支持此功能。相反,用户必须首先选择他们希望授予或撤销权限的应用。此更改旨在通过更有意识地授予权限来保护用户。
电话号码
Android 11 更改了您的应用在读取电话号码时使用的与电话相关的权限。
如果您的应用面向Android 11或更高版本并且需要访问以下列表中显示的电话号码API,则必须请求权限 READ_PHONE_NUMBERS ,而不是READ_PHONE_STATE权限。
类和 类getLine1Number()中的 方法 。TelephonyManagerTelecomManager
getMsisdn()类中 不受支持的方法TelephonyManager 。
如果您的应用声明READ_PHONE_STATE调用的方法不是上一个列表中的方法,您可以继续READ_PHONE_STATE跨所有 Android 版本请求。但是,如果您READ_PHONE_STATE仅对前面列表中的方法使用权限,请按如下方式更新您的清单文件:
更改您的声明,READ_PHONE_STATE以便您的应用仅在 Android 10(API 级别 29)及更低版本上使用该权限。
添加READ_PHONE_NUMBERS权限。
以下清单声明片段演示了此过程:
<manifest>
<!-- Grants the READ_PHONE_STATE permission only on devices that run
Android 10 (API level 29) and lower. -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"
android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
</manifest>
额外资源
更多关于Android 11权限变化的信息,请查看以下资料:
影片