1、简介
为了更好的更新文档,抽空看了看Android R的官方文档,可能列举不全,大佬请自行移至官网查看,从之前的时间轴就可以看出,第三季度即将发布正式版,那么在发布正式版之前的适配工作怎么做呢?。
运行环境:Android studio 4.1 在8-17已经发布了,需要的可以去官网下载,那么需要适配 Android 11 那么建议下载 studio4.2 (金丝雀版)。毕竟官网也说建议下载预览版,差别就在于旧版SDK不兼容,在 4.1 显示的SDK 是 Android 10.0+,4.2显示的是Android 11。
设置studio ,打开模块级 build.gradle
文件并更新 compileSdkVersion
和 targetSdkVersion
:
android {
compileSdkVersion 30
defaultConfig {
targetSdkVersion 30
}
...
}
当前可以用模拟器适配,也可以升级MIUI12的小米部分手机进行适配,华为将在9月底之前升级系统更新至Android11。
2、隐私权更新
以下是汇总了Android 11 与隐私权限相关的变更,Android 11中隐私权限相关的主要变更分区存储,当前应用的 自身的应用专用缓存文件 下的操作不需要权限,可以直接访问
1、分区存储强制执行:
以 Android 11 为目标平台的应用,以及以 Android 10 为目标平台且未将requestLegacyExternalStorage 设为 true 已停用分区存储的应用,Android 11 的分区存储兼容设置将失效。
Android 使用的文件系统类似于其他平台上基于磁盘的文件系统。系统提供了以下几种保存应用数据:
应用专属存储空间:存储仅供应用使用的文件,可以存储到内部存储卷中的专属目录或外部存储空间中的其他专属目录。使用内部存储空间中的目录保存其他应用不应访问的敏感信息。
共享存储:存储您的应用打算与其他应用共享的文件,包括媒体、文档和其他文件。
偏好设置:以键值对形式存储私有原始数据。
数据库:使用 Room 持久性库将结构化数据存储在专用数据库中。
如果用户是 升级的Android11 应用,将 preserveLegacyExternalStorage 属性设为 true ,用户任然可以使用旧版存储模型 ,如果是卸载重装应用,此属性无效
Android R 规定了 APP 有两种外部存储空间视图模式:Legacy View(兼容模式)、Filtered View(分区模式)
可以用nvironment.isExternalStorageLegacy() 这个 API 来检查 APP 的运行模式
分区模式中文件路径变更:Environment.getExternalStorageState() 变更为:context.getExternalFilesDir()
android:installLocation="preferExternal"在应用的清单文件中指明偏好设置,以便将应用安装到外部存储空间
2、一次性权限
请求位置信息、麦克风摄像头权限需要每次都重新获取权限,电话号码权限修改:必须请求 READ_PHONE_NUMBERS 权限 或者
开发者可以请求用户停用自动重启功能,停用后会保持当前已经请求的权限不会在下次进入应用重新请求, isAutoRevokeWhitelisted()。如果此方法返回 true,则系统不会自动重置应用的权限。
Android 11 更改了您的应用在读取电话号码时使用的与电话相关的权限。
(1)如果您的应用以 Android 11 为目标平台,并且需要访问以下列表中显示的电话号码 API,则必须请求 READ_PHONE_NUMBERS 权限,而不是 READ_PHONE_STATE 权限。
1.TelephonyManager 类和 TelecomManager 类中的 getLine1Number() 方法。
2.TelephonyManager 类中不受支持的 getMsisdn() 方法。
(2)如果您的应用声明 READ_PHONE_STATE 以调用前面列表中的方法以外的方法,您可以继续在所有 Android 版本中请求 READ_PHONE_STATE。不过,如果您仅对前面列表中的方法使用 READ_PHONE_STATE 权限,请按以下方式更新您的清单文件:
1.更改 READ_PHONE_STATE 的声明,以使您的应用仅在 Android 10(API 级别 29)及更低版本中使用该权限。
2.添加 READ_PHONE_NUMBERS 权限。以下清单声明代码段演示了此过程:
3、后台位置信息访问权限:Android 11 更改了应用向用户请求后台位置信息权限的方式,通过对权限请求方法的多次单独调用,逐步请求前台(粗略或精确)和后台位置权限。
Android 11 的设备上,当请求在后台访问位置时,系统对话框不再包含用于启用后台位置信息访问权限的按钮。如需启用后台位置信息访问权限,用户必须在设置页面上针对应用的位置权限设置一律允许选项
如 shouldShowRequestPermissionRationale() 返回 true,请向用户显示包含以下内容的指导界面:
1、明确说明应用功能需要在后台访问位置信息的原因。
2、用于授予后台位置权限的设置选项的用户可见标签。您可以调用getBackgroundPermissionOptionLabel() 获取此标签。此方法的返回值会根据用户设备的语言偏好设置进行本地化。
供用户拒绝授予权限的选项。如果用户拒绝应用在后台访问位置信息,他们应该能够继续使用应用。
以 Android 10 或更低版本为目标平台的应用
当应用中的某项功能请求后台位置信息访问权限时,用户会看到一个系统对话框。此对话框包含一个选项,可用于导航到设置页面上的应用位置权限选项。
如果应用已遵循有关请求位置权限的最佳做法,您无需对应用进行任何更改即可让此新行为生效。
4、软件包可见性:主要影响应用商店之类的App
5、数据访问审核:
6、前台服务类型:Android 11 更改了前台服务访问摄像头和麦克风数据的方式
对在使用时访问的限制
如果您的应用在后台运行时启动前台服务,该服务就具有以下访问限制:
除非用户已向您的应用授予 ACCESS_BACKGROUND_LOCATION 权限,否则该服务无法访问位置信息。
该服务无法访问麦克风或摄像头。
另一方面,如果您的应用在前台运行时启动前台服务,该服务就具有以下访问许可:
如果用户已向您的应用授予 ACCESS_BACKGROUND_LOCATION 权限,该服务就始终都能访问位置信息。否则,如果用户已向您的应用授予 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限,该服务就可以在使用时访问位置信息。
如果用户已向您的应用授予 CAMERA 权限,该服务就可以在使用时访问摄像头。
如果用户已向您的应用授予 RECORD_AUDIO 权限,该服务就可以在使用时访问麦克风。
后台任务示例
只要满足以下各个条件,就会将应用视为在后台运行:
该应用的所有 Activity 目前对用户都不可见。
该应用目前未运行任何在它的某个 Activity 对用户可见时启动的前台服务。
以下列表显示了应用在后台运行时管理的常见待处理任务:
您的应用在清单文件中注册广播接收器。
您的应用使用闹钟管理器设定重复闹钟。
您的应用使用工作管理器将后台任务调度为工作器,或使用作业调度程序将后台任务调度为作业。
豁免
在以下某种情况下启动前台服务时,该服务不受只能在使用时访问位置信息、摄像头和麦克风的限制:
该服务由系统组件启动。
该服务通过与应用微件进行交互启动。
该服务通过与通知进行交互启动。
该服务作为从其他可见应用发送的 PendingIntent 启动。
该服务由作为在设备所有者模式下运行的设备政策控制器的应用启动。
该服务由提供 VoiceInteractionService 的应用启动。
该服务由具有 START_ACTIVITIES_FROM_BACKGROUND 特权的应用启动。
此外,如果服务的前台服务类型为 location 并且由具有 ACCESS_BACKGROUND_LOCATION 权限的应用启动,则该服务始终都能访问位置信息。
3、功能和API
Android 11(R)会缓存共享数据集,为机器学习和媒体播放等用例提供支持。当您的应用需要访问共享大型数据集时,可以先查找是否有缓存的这些数据集,然后再决定是否下载新副本。
如需向设备上的一组特定应用授予访问权限,请将这些应用的软件包名称传递到 allowPackageAccess() 中。
要仅允许证书签名所用密钥与您的应用所用密钥相同的应用(例如您管理的应用套件),请调用 allowSameSignatureAccess()。
如需向设备上的所有应用授予访问权限,请调用 allowPublicAccess()。
4、对聊天的新支持
Android 11 对会话的处理方式进行了多项改进。会话是满足以下条件的通信:
具有实时性。
可为双向或多向通信,但不能是单向的性质。
在两人或更多人(不能是聊天机器人)之间进行。
现在,这些对话显示在各自的区域中,这些对话的通知会突出显示并具有额外的功能:
如果用户长按对话通知,系统会为用户提供多个选项:
将对话提升为气泡(如果应用支持气泡)。
为此对话创建快捷方式并将其添加到主屏幕。
将此会话的通知设为静音或暂停通知。
将此会话标记为非常重要。
通知的设计采用新版本的 MessagingStyle,突出了用于代表用户的头像,同时还显示了进行对话的应用的图标。
5、手机工作资料的支持(隐私重要的大哥必备,别人用不用都行,但是还是要支持呀)
6、在 Android 11 发布后,ANGLE APK 将包含一个配置文件,用于按应用启用 ANGLE。与此同时,从 Android 11 预览版开始,您可以使用 ANGLE 运行非核心应用来评估性能,并确定特定应用是否应使用 ANGLE。这一评估和选择启用选项可让开发者逐渐转向 ANGLE。
7、来自后台的自定义消息框被屏蔽
文本消息框 API 变更
由于平台行为发生了变更,以 Android 11 为目标平台的应用会发现文本消息框受到以下负面影响:
getView() 方法返回 null。
以下方法的返回值并不反映实际值,因此您不应在应用中依赖于它们:
getHorizontalMargin()
getVerticalMargin()
getGravity()
getXOffset()
getYOffset()
以下方法是空操作,因此您的应用不应使用它们:
setMargin()
setGravity()
改了一下发现还是重新写会更好一点,后续将加入 当前已经适配的部分,比如文件,存储等的文章