如果应用以 Android 11 为目标平台并且数月未使用,系统会通过自动重置用户已授予应用的运行时敏感权限来保护用户数据。此操作与用户在系统设置中查看权限并将应用的访问权限级别更改为拒绝的做法效果一样。如果应用已遵循有关在运行时请求权限的最佳做法,那么您不必对应用进行任何更改。这是因为,当用户与应用中的功能互动时,您应该会验证相关功能是否具有所需权限。
注意:系统仅重置运行时权限,在请求这些权限时,系统会向用户显示运行时提示。
请求用户停用自动重置功能
如果需要,您可以要求用户阻止系统重置应用的权限。如果用户希望应用主要在后台运行,即使用户不与应用互动,应用也能正常工作,那么此做法就非常有用。此类使用场景的示例如下:
图 1. 用户已停用为给定应用自动重置权限的功能。
- 为家人的安全提供保障
- 同步数据
- 与智能设备通信
- 与配套设备配对
如需将用户定向到系统设置中您应用的页面,请调用包含 Intent.ACTION_AUTO_REVOKE_PERMISSIONS intent 操作的 intent。在此屏幕中,用户可以通过执行以下操作来阻止系统重置应用的权限:
- 点按权限,系统会加载应用权限设置屏幕。
- 关闭如果未使用此应用,则移除相关权限选项,如图 1 所示。
确定是否已停用自动重置功能
如需检查是否已针对应用停用自动重置功能,请调用 isAutoRevokeWhitelisted()。如果此方法返回 true
,则系统不会自动重置应用的权限。
测试自动重置功能
如需验证系统是否重置了应用的权限,请执行以下操作:
- 保存系统重置应用权限所需等待的默认时长。这样,您就可以在测试后恢复此设置:
1. threshold=$(adb shell device_config get permissions \
auto_revoke_unused_threshold_millis2)
减少系统重置权限所需等待的时长。下面的示例对系统进行了修改,以致当您停止与应用互动后仅一秒钟,系统就会重置应用的权限:
adb shell device_config put permissions \
auto_revoke_unused_threshold_millis2 1000
手动调用自动重置进程,如以下代码段所示。在运行此命令之前,请确保测试设备已开启片刻(大约 45 秒钟)。
adb shell cmd jobscheduler run -u 0 -f \
com.google.android.permissioncontroller 2
- 验证应用能否处理自动重置事件。
- 恢复系统在自动重置应用权限之前所需等待的默认时长:
• adb shell device_config put permissions \
auto_revoke_unused_threshold_millis2 $threshold