新功能
在外部存储设备中创建文件的改进
除了引入分区存储,Android 10 还添加了以下与外部存储相关的功能:
- 使用
IS_PENDING标志向应用授予对写入磁盘的媒体文件的独占访问权限。 - 提示系统在指定位置存储新文件。
- 每个外部存储设备都有唯一的卷名称。
前台服务类型
Android 10 引入了 foregroundServiceType XML 清单属性,可以将其包含在多项特定服务的定义中。您可以为特定服务分配多个前台服务类型。
更多
更多功能请参考 官方文档:Android 10 功能和 API。
行为变更
所有应用的行为变更
Android 10 引入了一些行为变更,这些变更可能会影响您的应用。当应用在 Android 10 上运行时,无论应用的 targetSdkVersion 为何,这些变更都会生效。您应该测试并视需要修改应用,以正确支持这些变更。
手势导航
从 Android 10 开始,用户可以启用手势导航。手势导航会影响所有应用,无论应用是否以 API 级别 29 为目标平台。例如,用户从屏幕边缘向内滑动,系统会将该手势解读为“返回”导航,除非应用明确替换该手势。
为了使您的应用与手势导航兼容,您需要将应用内容扩展到屏幕边缘,并处理冲突手势。有关信息,请参阅手势导航文档。
HTTPS 连接变更
在 Android 10 中,如果将 null 传递到 setSSLSocketFactory(),则会发生 IllegalArgumentException。在以前版本中,将 null 传入 setSSLSocketFactory() 与传入当前默认设置效果相同。
更多
更多行为变更请参考 官方文档:Android 10 所有应用行为变更。
以 API 29+ 为目标平台的应用
Android 10 包含更新后的系统行为变更,这些变更可能会影响您的应用。本页列出的变更仅适用于以 API 29 或更高版本为目标平台的应用。将 targetSdkVersion 设置为 29 或更高的应用,必须修改以正确支持这些行为(如果适用)。
针对全屏 Intent 的权限变更
如果应用以 Android 10 或更高版本为目标平台并使用包含全屏 intent 的通知,则必须在应用的清单文件中请求 USE_FULL_SCREEN_INTENT 权限。这是普通权限,系统会自动为请求权限的应用授予此权限。
若未请求此权限便尝试创建包含全屏 intent 的通知,系统会忽略全屏 intent 并输出以下日志消息:
fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission
支持可折叠设备
Android 10 增加了对可折叠设备和大屏设备的支持。
更多
更多行为变更请参考 官方文档:以 API 29+ 为目标平台的应用行为变更。
非 SDK 限制
为了确保应用的稳定性和兼容性,Android 平台限制了应用在 Android 9(API 级别 28)中使用哪些非 SDK 接口。Android 10 更新了受限制的非 SDK 接口列表。我们的目标是在限制使用非 SDK 接口之前,确保有可用的公开替代方案。
隐私权
Android 10 引入了大量变更,以改进系统界面、使权限授予更严格以及限制应用使用的数据,从而保护隐私权并赋予用户更多控制权。
分区存储
默认情况下,以 Android 10 及更高版本为目标平台的应用在访问外部存储空间时被分区访问。此类应用可以在无需请求与存储相关的用户权限的情况下,查看外部存储设备中的以下类型文件:
- 应用专属目录中的文件(使用
getExternalFilesDir()访问)。 - 应用创建的照片、视频和音频片段(通过 媒体库 访问)。
详细了解分区存储以及如何共享、访问和修改外部存储设备上的文件,请参阅 管理外部存储设备中的文件 和 访问和修改媒体文件 的指南。
在后台运行时访问设备位置信息需要权限
为了更好地控制应用对位置信息的访问,Android 10 引入了 ACCESS_BACKGROUND_LOCATION 权限。
与 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION 权限不同,ACCESS_BACKGROUND_LOCATION 只会影响应用在后台运行时对位置信息的访问。除非满足以下条件之一,否则应用会被视为在后台访问位置信息:
- 应用的 activity 可见。
- 应用正在运行一项已声明前台服务类型
location的前台服务。
以 Android 9 或更低版本为目标平台时自动授予访问权限
如果应用在 Android 10 或更高版本上运行,但以 Android 9(API 级别 28)或更低版本为目标平台,平台会自动授予访问权限:
- 若应用声明了
ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限,系统会在安装过程中自动为ACCESS_BACKGROUND_LOCATION添加权限。 - 若应用请求了
ACCESS_FINE_LOCATION或 `
ACCESS_COARSE_LOCATION,系统会自动将 ACCESS_BACKGROUND_LOCATION 添加到请求中。
针对从后台启动 Activity 的限制
从 Android 10 开始,系统增加了针对从后台启动 Activity 的限制。这有助于减少对用户的干扰,并让用户更好地控制屏幕上显示的内容。只要应用因用户互动的直接结果启动 Activity,该应用就不会受到这些限制的影响。
适配方案请参考针对从后台启动 Activity 的限制。
随机分配 MAC 地址
在搭载 Android 10 或更高版本的设备上,系统默认传输随机分配的 MAC 地址。
如果应用处理企业用例,平台提供 API 用于执行与 MAC 地址相关的多项操作:
- 获取随机分配的 MAC 地址:设备所有者应用和资料所有者应用可以通过调用
getRandomizedMacAddress()检索分配给特定网络的随机分配 MAC 地址。 - 获取实际的出厂 MAC 地址:设备所有者应用可以通过调用
getWifiMacAddress()检索设备的实际硬件 MAC 地址。此方法对于跟踪设备队列非常有用。
对不可重置的设备标识符的限制
从 Android 10 开始,应用必须具有 READ_PRIVILEGED_PHONE_STATE 特许权限才能访问设备的不可重置标识符(包括 IMEI 和序列号)。
受影响的方法包括:
BuildgetSerial()
TelephonyManagergetImei()getDeviceId()getMeid()getSimSerialNumber()getSubscriberId()
一些电话 API、蓝牙 API 和 WLAN API 需要精确位置权限
如果应用以 Android 10 或更高版本为目标平台,则必须具有 ACCESS_FINE_LOCATION 权限,才能使用 Wi-Fi API、Wi-Fi Aware API 或 Bluetooth API 中的多种方法。
受影响的 API 请参考一些电话 API、蓝牙 API 和 WLAN API 需要精确位置权限。
更多
更多隐私权变更请参考 官方文档:Android 10 中的隐私权变更。