爱笑的姑娘|拖不得了,Android11真的要来了,最全适配实践指南奉上( 六 )


  • 内部存储卷的根目录 。
  • 设备制造商认为可靠的各个 SD 卡卷的根目录 , 无论该卡是模拟卡还是可移除的卡 。 可靠的卷是指应用在大多数情况下可以成功访问的卷 。
  • Download 目录 。
无法再使用 ACTION_OPEN_DOCUMENT_TREE 或 ACTION_OPEN_DOCUMENT intent 操作请求用户从以下目录中选择单独的文件:
  • Android/data/ 目录及其所有子目录 。
  • Android/obb/ 目录及其所有子目录 。

限制对 APN 数据库的读取访问以 Android 11 为目标平台的应用现在必须具备 Manifest.permission.WRITE_APN_SETTINGS 特权 , 才能读取或访问电话提供程序 APN 数据库 。 如果在不具备此权限的情况下尝试访问 APN 数据库 , 会生成安全异常 。
问题来了 , APN是啥?
  • 指一种网络接入技术 , 是通过手机上网时必须配置的一个参数 , APN配置参数包括名字 , 运营商编号 , APN接入点等等 。
就是说如果没有Manifest.permission.WRITE_APN_SETTINGS权限就不能读取APN数据库了 , 但是!这个权限很早之前就被限定只有系统程序才能申请这个权限了 , 现在这个特权没理解到是什么意思 , 难道系统程序都不能随便申请了?有大神可以评论区留言告知 。
在元数据文件中声明“无障碍”按钮使用情况从 Android 11 开始 , 您的无障碍服务无法在运行时声明与系统的“无障碍”按钮的关联 。 如果您将 AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON 附加到 AccessibilityServiceInfo 对象的 flags 属性 , 框架就不会将“无障碍”按钮回调事件传递给您的服务 。
做过无障碍辅助功能的应该都知道AccessibilityServiceInfo要设置flag为FLAG_REQUEST_ACCESSIBILITY_BUTTON , getAccessibilityButtonController方法获取辅助功能按钮控制器 , 并且可用于查询辅助功能按钮的状态并注册监听器以进行交互和辅助功能按钮的状态更改 。
但是 , Android 11开始 , 这样写不能获取辅助按钮回调事件了 , 得换成另外一种写法 。 在元数据文件(通常为 res/raw/accessibilityservice.xml)中使用 flagRequestAccessibilityButton 标记声明您的无障碍服务与“无障碍”按钮的关联 。
Firebase JobDispatcher 和 GCMNetworkManager如果您的应用以 API 级别 30 或更高级别为目标平台 , 在搭载 Android 6.0(API 级别 23)或更高版本的设备上会停用 Firebase JobDispatcher 和 GcmNetworkManager API 调用 。
这两个api国内都用不了 , 主要用于后台任务 。 官方给出的替代意见是WorkManager , 这个国内是可以用的 , 属于jetpack组件 , 主要用于调度和执行可延期的后台工作 。
设备到设备文件传输如果您的应用以 Android 11 为目标平台 , 您将无法再使用 allowBackup 属性停用应用文件的设备到设备迁移 。 系统会自动启用此功能 。 不过 , 即使您的应用以 Android 11 为目标平台 , 您也可以通过将 allowBackup 属性设置为 false 来停用应用文件的云端备份和恢复 。
android:allowBackup属性
  • 代表是否允许应用参与备份和恢复基础架构 。 如果将此属性设为 false , 则永远不会为该应用执行备份或恢复 , 即使是采用全系统备份方法也不例外(这种备份方法通常会通过 adb 保存所有应用数据) 。 此属性的默认值为 true 。
所以这里是不能停用文件的设备到设备迁移 , 但是可以停用云端备份和恢复
自动重置权限
如果应用以 Android 11 为目标平台并且数月未使用 , 系统会通过自动重置用户已授予应用的运行时敏感权限来保护用户数据 。 此操作与用户在系统设置中查看权限并将应用的访问权限级别更改为拒绝的做法效果一样 。 如果应用已遵循有关在运行时请求权限的最佳做法 , 那么您不必对应用进行任何更改 。 这是因为 , 当用户与应用中的功能互动时 , 您应该会验证相关功能是否具有所需权限 。


推荐阅读