Android 17 面向开发者引入了一些出色的新功能和 API。以下 部分总结了这些功能,可帮助您开始使用相关 API。
如需详细了解新增、修改和移除的 API,请参阅 API 差异 报告。如需详细了解新的 API,请访问 Android API 参考文档,新 API 会突出显示以方便查看。
您还应查看平台变更可能会影响应用的方面。如需了解详情,请参阅以下页面:
- 以 Android 17 为目标平台时影响应用的行为变更
- 无论
targetSdkVersion如何,都会影响所有应用的行为变更。
核心功能
Android 17 添加了以下与 Android 核心 功能相关的新功能。
新的 ProfilingManager 触发器
Android 17 向 ProfilingManager 添加了多个新的系统触发器,可帮助您收集深入的数据来调试性能问题。
新增的触发条件包括:
TRIGGER_TYPE_COLD_START:触发器在应用冷启动期间触发。它会在响应中同时提供调用堆栈样本和系统轨迹。TRIGGER_TYPE_OOM:当应用抛出OutOfMemoryError并提供 Java 堆转储作为响应时,会触发此事件。TRIGGER_TYPE_KILL_EXCESSIVE_CPU_USAGE:当应用因 CPU 使用率异常过高而被终止时,系统会触发此事件,并提供调用堆栈样本作为响应。
如需了解如何设置系统触发器,请参阅有关基于触发器的分析以及如何检索和分析分析数据的文档。
JobDebugInfo API
Android 17 引入了新的 JobDebugInfo API,可帮助开发者调试
其 JobScheduler 作业,包括作业为何未运行、运行了多长时间以及
其他汇总信息。
扩展后的 JobDebugInfo API 的第一个方法是
getPendingJobReasonStats(),该方法会返回一个映射,其中包含作业处于
待执行状态的原因及其各自的累计待执行
时长。此方法将 getPendingJobReasonsHistory() 和
getPendingJobReasons() 方法结合在一起,让您能够了解预定
作业为何未按预期运行,但通过在单个方法中提供时长和作业原因,简化了信息检索。
例如,对于指定的 jobId,该方法可能会返回
PENDING_JOB_REASON_CONSTRAINT_CHARGING 和 60000 毫秒的时长,表明
作业因未满足充电限制而处于待执行状态 60000 毫秒。
隐私权
Android 17 包含以下新功能,可提升用户隐私保护。
Android 联系人选择器
Android 联系人选择器是一个标准化的可浏览界面,供用户与您的应用分享联系人。该选择器可在搭载 Android 17 或更高版本的设备上使用,可提供一种注重隐私保护的替代方案,以取代范围广泛的 READ_CONTACTS 权限。您的应用不会请求访问用户的整个地址簿,而是指定所需的数据字段(例如电话号码或电子邮件地址),然后用户选择要分享的特定联系人。这只会授予您的应用对所选数据的读取权限,从而确保精细控制,同时提供一致的用户体验,并具有内置的搜索、个人资料切换和多选功能,而无需构建或维护界面。
如需了解详情,请参阅联系人选择器文档。
安全
Android 17 添加了以下新功能,可提升设备和应用 安全性。
Android 高级保护模式 (AAPM)
Android 高级保护模式为 Android 用户提供了一套强大的新安全功能,标志着在保护用户(尤其是面临较高风险的用户)免遭复杂攻击方面迈出了重要一步。AAPM 是一项选择启用功能,只需进行一项配置设置即可激活。用户可以随时启用该功能,以应用一套主观的安全保护措施。
这些核心配置包括:禁止安装未知来源的应用(旁加载)、限制 USB 数据信号传输,以及强制执行 Google Play 保护机制扫描,从而显著减小设备的攻击面。
开发者可以使用 AdvancedProtectionManager API 与此功能集成,以检测模式的状态,从而使应用能够在用户选择启用此模式时自动采用强化型安全姿态或限制高风险功能。
连接
Android 17 添加了以下功能,可提升设备和应用 连接。
受限卫星网络
实现优化,使应用能够在低带宽卫星网络上有效运行。
用户体验和系统界面
Android 17 包含以下变更,可提升用户体验。
接力
切换是 Android 17 中新增的一项功能和 API,应用开发者可以将其集成到应用中,以便为用户提供跨设备连续性。它允许用户在一个 Android 设备上启动应用 activity,然后将其转移到另一个 Android 设备。Handoff 在用户设备的后台运行,并通过各种入口点(例如接收设备上的启动器和任务栏)显示用户附近其他设备上的可用活动。
应用可以指定 Handoff 来启动相同的原生 Android 应用(如果该应用已安装在接收设备上且可供使用)。在此应用到应用流程中,用户通过深层链接跳转到指定 activity。或者,应用到网站切换功能可以作为后备选项提供,也可以通过网址切换功能直接实现。
切换支持是按 activity 实现的。如需启用 Handoff,请为 activity 调用 setHandoffEnabled() 方法。可能需要随切换传递额外数据,以便接收设备上重新创建的 activity 可以恢复适当的状态。实现 onHandoffActivityRequested() 回调以返回 HandoffActivityData 对象,该对象包含用于指定 Handoff 应如何处理并在接收设备上重新创建 activity 的详细信息。
实时更新 - 语义颜色 API
在 Android 17 中,实时更新启动了语义着色 API,以支持具有普遍意义的颜色。
以下类支持语义着色:
NotificationNotification.MetricNotification.ProgressStyle.PointNotification.ProgressStyle.Segment
填色游戏
- 绿色:与安全相关。 此颜色应在以下情况下使用:让别人知道您处于安全状态。
- 橙色:用于表示警告和标记物理危险。当用户需要注意设置更好的保护设置时,应使用此颜色。
- 红色:通常表示危险,停止。它应在需要紧急引起人们注意的情况下呈现。
- 蓝色:中性颜色,适用于信息性内容,应与其他内容区分开来。
以下示例展示了如何将语义样式应用于通知中的文本:
val ssb = SpannableStringBuilder()
.append("Colors: ")
.append("NONE", Notification.createSemanticStyleAnnotation(SEMANTIC_STYLE_UNSPECIFIED), 0)
.append(", ")
.append("INFO", Notification.createSemanticStyleAnnotation(SEMANTIC_STYLE_INFO), 0)
.append(", ")
.append("SAFE", Notification.createSemanticStyleAnnotation(SEMANTIC_STYLE_SAFE), 0)
.append(", ")
.append("CAUTION", Notification.createSemanticStyleAnnotation(SEMANTIC_STYLE_CAUTION), 0)
.append(", ")
.append("DANGER", Notification.createSemanticStyleAnnotation(SEMANTIC_STYLE_DANGER), 0)
Notification.Builder(context, channelId)
.setSmallIcon(R.drawable.ic_icon)
.setContentTitle("Hello World!")
.setContentText(ssb)
.setOngoing(true)
.setRequestPromotedOngoing(true)