Android 5.0 API

API 级别:21

Android 5.0 (LOLLIPOP) 为用户和应用开发者提供了新功能。本文介绍其中最值得关注的新 API。

如果您有已发布的应用,请务必查看您应该在应用中考虑的 Android 5.0 行为变更。即使您不使用新 API 或以新功能为目标,这些行为变更也可能会影响 Android 5.0 设备上的应用。

如需简要了解新平台功能,请改为参阅 Android Lollipop 亮点

着手开发

如需开始构建 Android 5.0 应用,您必须先获取 Android SDK。然后,使用 SDK 管理器下载 Android 5.0 SDK Platform 和系统映像。

更新目标 API 级别

为了更好地针对搭载 Android 5.0 的设备优化您的应用,请将 targetSdkVersion 设置为 "21",在 Android 5.0 系统映像上安装您的应用并对其进行测试,然后发布包含此变更的更新应用。

您可以使用 Android 5.0 API,同时支持较低版本,方法是在代码中添加条件,在执行您的 minSdkVersion 不支持的 API 之前检查系统 API 级别。如需详细了解如何保持向后兼容性,请参阅支持不同平台版本

如需详细了解 API 级别的工作原理,请参阅什么是 API 级别?

重要的行为变更

如果您之前发布过 Android 应用,请注意您的应用可能受到 Android 5.0 变化的影响。

如需了解完整信息,请参阅 Android 5.0 变更

界面

Material Design 支持

Android 5.0 添加了对 Android 的新 Material Design 样式的支持。您可以创建采用 Material Design 的应用,它们具有动态的视觉效果,并且具有能让用户感觉自然的界面元素过渡效果。此支持包括:

  • Material Design 主题
  • 视图阴影
  • RecyclerView widget
  • 可绘制动画和造型效果
  • Material Design 动画和 Activity 转换效果
  • 针对基于视图状态的视图属性的动画生成器
  • 可自定义的 UI 小部件和具有可由您控制的调色板的应用栏
  • 基于 XML 矢量图形的动画和非动画可绘制对象

如需详细了解如何向应用添加 Material Design 功能,请参阅 Material Design

最近使用的应用屏幕中的并发文档和 Activity

在之前的版本中,“最近用过”屏幕只能针对用户最近互动过的每个应用显示一项任务。现在,您的应用可以根据需要为其他并发文档 activity 打开更多任务。此功能可让用户在“最近使用的应用”屏幕中的各个 activity 和文档之间快速切换,从而促进多任务处理,并在所有应用中提供一致的切换体验。此类并发任务的示例包括:网络浏览器应用中打开的标签页、办公应用中的文档、游戏中的并发对局或即时通讯应用中的聊天。您的应用可以通过 ActivityManager.AppTask 类管理其任务。

如需插入逻辑换行符以便系统将 activity 视为新任务,请在通过 startActivity() 启动 activity 时使用 FLAG_ACTIVITY_NEW_DOCUMENT。您还可以通过在清单中将 <activity> 元素的 documentLaunchMode 属性设置为 "intoExisting""always" 来获得此行为。

为避免让“最近用过”屏幕变得杂乱,您可以在应用中设置该屏幕可显示的任务数上限。为此,请设置 <application> 属性 android:maxRecents。目前可指定的上限为每位用户 50 个任务(低 RAM 设备为 25 个)。

您可将“最近用过”屏幕中的任务设置为在重新启动后保留。如需控制持久性行为,请使用 android:persistableMode 属性。您还可以通过调用 setTaskDescription() 方法,更改 activity 在“最近使用的应用”屏幕中的视觉属性,如 activity 的颜色、标签和图标。

WebView 更新

Android 5.0 将 WebView 实现更新为 Chromium M37,增强了安全性和稳定性,并修复了一些 bug。针对 Android 5.0 上运行的 WebView 的默认用户代理字符串已更新,将 37.0.0.0 纳入版本号。

此版本引入了 PermissionRequest 类,该类可让您的应用通过 getUserMedia() 等 Web API 向 WebView 授予访问相机和麦克风等受保护资源的权限。您的应用必须拥有这些资源的相应 Android 权限,才能向 WebView 授予权限。

借助新的 onShowFileChooser() 方法,您现在可以使用 WebView 中的输入表单字段,并启动文件选择器从 Android 设备中选择图片和文件。

此外,此版本还提供了对 WebAudioWebGLWebRTC 开放标准的支持。如需详细了解此版本中的新功能,请参阅 Android 版 WebView

屏幕采集和共享

Android 5.0 可让您利用新的 android.media.projection API 为应用添加屏幕截取和屏幕共享功能。例如,如果您想在视频会议应用中启用屏幕共享,此功能会非常有用。

借助新的 createVirtualDisplay() 方法,您的应用可以将主屏幕(默认显示画面)的内容捕获到 Surface 对象中,然后应用就可以通过网络将其发送出去。该 API 仅允许采集非安全屏幕内容,不允许采集系统音频。如需开始截取屏幕,应用必须先使用通过 createScreenCaptureIntent() 方法获取的 Intent 启动屏幕截取对话框,以请求用户授予权限。

如需查看如何使用新 API 的示例,请参阅示例项目中的 MediaProjectionDemo 类。

通知

锁定屏幕通知

Android 5.0 中的锁定屏幕可以显示通知。用户可以通过设置选择是否允许在安全的锁定屏幕上显示敏感通知内容。

您的应用可以控制在安全锁定屏幕上显示的通知中可见信息的详细程度。如需控制可见性级别,请调用 setVisibility() 并指定以下值之一:

当可见性级别为 VISIBILITY_PRIVATE 时,您还可以提供通知内容的隐去版本,以隐藏个人详细信息。例如,短信应用可能会显示一条通知,指出“您有 3 条新短信”,但隐藏了短信内容和发送者。如需提供此备用通知,请先使用 Notification.Builder 创建替换通知。创建专用通知对象时,请通过 setPublicVersion() 方法为其附加替换通知。

通知元数据

Android 5.0 使用与应用通知关联的元数据,以更智能的方式对通知进行排序。如需设置元数据,请在构建通知时调用 Notification.Builder 中的以下方法:

  • setCategory():告知系统当设备处于优先模式时如何处理应用通知(例如,通知表示来电、即时通讯还是闹钟)。
  • setPriority():将通知标记为高于或低于普通通知的重要程度。 如果优先级字段设置为 PRIORITY_MAXPRIORITY_HIGH 的通知还有声音或振动,则会显示在小型浮动窗口中。
  • addPerson():可让您添加与通知相关的一个或多个人员。应用可以使用此方法向系统表明应将指定人员发出的通知归为一组,或者将这些人员发出的通知视为更重要的通知。

图形

对 OpenGL ES 3.1 的支持

Android 5.0 添加了 Java 接口和对 OpenGL ES 3.1 的原生支持。OpenGL ES 3.1 中提供的重要新功能包括:

  • 计算着色器
  • 单独的着色器对象
  • 间接绘制命令
  • 多重采样和模板纹理
  • 着色语言改进
  • 用于高级混合模式和调试的扩展程序
  • 向后兼容 OpenGL ES 2.0 和 3.0

Android 上 OpenGL ES 3.1 的 Java 接口随 GLES31 提供。使用 OpenGL ES 3.1 时,请务必在清单文件中使用 <uses-feature> 标记和 android:glEsVersion 属性对其进行声明。例如:

<manifest>
    <uses-feature android:glEsVersion="0x00030001" />
    ...
</manifest>

如需详细了解如何使用 OpenGL ES,包括如何在运行时检查设备支持的 OpenGL ES 版本,请参阅 OpenGL ES API 指南

Android 扩展包

除了 OpenGL ES 3.1 之外,此版本还提供了一个扩展包,其中包括 Java 接口和对高级图形功能的原生支持。Android 会将这些扩展视为单个软件包。(如果存在 ANDROID_extension_pack_es31a 扩展,您的应用可以假定软件包中的所有扩展都存在,并使用单个 #extension 语句启用着色语言功能。)

该扩展包支持:

  • 保证为着色器存储缓冲区、图像和原子提供 Fragment 着色器支持(在 OpenGL ES 3.1 中,Fragment 着色器支持是可选的)。
  • 镶嵌和几何着色器
  • ASTC (LDR) 纹理压缩格式
  • 每采样内插和着色
  • 帧缓冲区中每个颜色附件采用不同混合模式

该扩展包的 Java 接口随 GLES31Ext 提供。在应用清单中,您可以将应用声明为必须仅安装在支持该扩展包的设备上。 例如:

<manifest>
    <uses-feature android:name=“android.hardware.opengles.aep”
        android:required="true" />
    ...
</manifest>

媒体

用于高级相机功能的 Camera API

Android 5.0 引入了新的 android.hardware.camera2 API,以便进行精细照片拍摄和图像处理。现在,您可以通过 getCameraIdList() 以编程方式访问可供系统使用的摄像头设备,并使用 openCamera() 连接到特定设备。如需开始拍摄图片,请创建一个 CameraCaptureSession,并指定 Surface 对象来发送拍摄的图片。CameraCaptureSession 可配置为拍摄单张照片或连拍多张图片。

如需在拍摄新图片时收到通知,请实现 CameraCaptureSession.CaptureCallback 监听器,并在拍摄请求中进行设置。现在,当系统完成图片拍摄请求时,您的 CameraCaptureSession.CaptureCallback 监听器会收到对 onCaptureCompleted() 的调用,从而在 CaptureResult 中为您提供图片拍摄元数据。

CameraCharacteristics 类可让您的应用检测设备上可用的相机功能。该对象的 INFO_SUPPORTED_HARDWARE_LEVEL 属性表示相机的功能级别。

如需了解如何使用更新后的 Camera API,请参阅此版本中的 Camera2BasicCamera2Video 实现示例。

音频回放

此版本对 AudioTrack 进行了以下更改:

  • 您的应用现在可以提供浮点格式 (ENCODING_PCM_FLOAT) 的音频数据。这样可以获得更大的动态范围、更一致的精度和更大的余量。 浮点运算在进行中间计算时特别有用。播放端点针对音频数据使用位深较低的整数格式。(在 Android 5.0 中,部分内部流水线目前还不是浮点数。)
  • 您的应用现在可以提供音频数据作为 ByteBuffer,格式与 MediaCodec 提供的格式相同。
  • WRITE_NON_BLOCKING 选项可以简化某些应用的缓冲和多线程处理。

媒体回放控制

请使用新的通知和媒体 API 来确保系统界面知道您的媒体播放,并且可以提取和显示专辑封面。现在,使用新的 MediaSessionMediaController 类,可以更轻松地跨界面和服务控制媒体播放。

新的 MediaSession 类取代了已废弃的 RemoteControlClient 类,并提供了一组用于处理传输控件和媒体按钮的回调方法。如果您的应用提供媒体播放功能,并在 Android TVWear 平台上运行,请使用 MediaSession 类,通过相同的回调方法来处理您的传输控制。

您现在可以使用新的 MediaController 类构建自己的媒体控制器应用。此类提供了一种线程安全的方法,可以在应用的界面进程中监控和控制媒体播放。 创建控制器时,应指定 MediaSession.Token 对象,以便您的应用可以与给定 MediaSession 进行交互。通过使用 MediaController.TransportControls 方法,您可以发送 play()stop()skipToNext()setRating() 等命令来控制该会话上的媒体播放。对于控制器,您还可以注册 MediaController.Callback 对象,以监听会话上的元数据和状态变化。

此外,您还可以使用新的 Notification.MediaStyle 类创建允许将播放控制与媒体会话绑定的丰富通知。

媒体浏览

Android 5.0 引入了可让应用通过新的 android.media.browse API 浏览其他应用媒体内容库的功能。如需公开应用中的媒体内容,请扩展 MediaBrowserService 类。您的 MediaBrowserService 实现应提供对 MediaSession.Token 的访问权限,以便应用可以播放通过您的服务提供的媒体内容。

如需与媒体浏览器服务交互,请使用 MediaBrowser 类。在创建 MediaBrowser 实例时,为 MediaSession 指定组件名称。然后,您的应用可以使用该浏览器实例连接到关联的服务,并获取 MediaSession.Token 对象,以播放通过该服务公开的内容。

存储空间

目录选择

Android 5.0 扩展了存储访问框架,允许用户选择整个目录子树,从而授予应用对所含全部文档的读写权限,而无需用户确认每项内容。

如需选择目录子树,请构建并发送 OPEN_DOCUMENT_TREE intent。系统会显示所有支持子树选择的 DocumentsProvider 实例,并允许用户浏览和选择目录。返回的 URI 表示对所选子树的访问权限。然后,您可以使用 buildChildDocumentsUriUsingTree()buildDocumentUriUsingTree() 以及 query() 来探索子树。

借助新的 createDocument() 方法,您可以在子树下的任意位置创建新文档或目录。如需管理现有文档,请使用 renameDocument()deleteDocument()。在发出这些调用之前,请检查 COLUMN_FLAGS 以验证提供程序是否支持这些调用。

如果您要实现 DocumentsProvider 并且希望支持子树选择,请实现 isChildDocument() 并在 COLUMN_FLAGS 中添加 FLAG_SUPPORTS_IS_CHILD

Android 5.0 还在共享存储空间上引入了新的软件包专用目录,您的应用可以在其中放置要加入 MediaStore 的媒体文件。新的 getExternalMediaDirs() 会返回所有共享存储设备上这些目录的路径。与 getExternalFilesDir() 类似,应用无需其他权限即可访问返回的路径。平台会定期扫描这些目录中的新媒体,但您也可以使用 MediaScannerConnection 明确扫描是否有新内容。

无线和连接

多个网络连接

Android 5.0 提供了新的多网络 API,使您的应用能够动态扫描具有特定功能的可用网络,并与它们建立连接。如果您的应用需要专用网络(例如 SUPL、彩信或运营商计费网络),或者您想使用特定类型的传输协议发送数据,此功能非常有用。

如需从您的应用以动态方式选择并连接到网络,请按以下步骤操作:

  1. 创建 ConnectivityManager
  2. 使用 NetworkRequest.Builder 类创建一个 NetworkRequest 对象,并指定您的应用感兴趣的网络功能和传输类型。
  3. 如需扫描合适的网络,请调用 requestNetwork()registerNetworkCallback(),并传入 NetworkRequest 对象和 ConnectivityManager.NetworkCallback 的实现。如果您希望在检测到合适的网络后主动切换到该网络,请使用 requestNetwork() 方法;如需仅接收已扫描网络的通知,而不主动切换,请改用 registerNetworkCallback() 方法。

当系统检测到合适的网络时,它会连接到网络并调用 onAvailable() 回调。您可以使用回调中的 Network 对象来获取有关网络的其他信息,或引导流量使用所选网络。

蓝牙低功耗

Android 4.3 引入了对发挥核心作用的蓝牙低功耗 (蓝牙 LE) 的平台支持。在 Android 5.0 中,Android 设备现在可以用作蓝牙 LE 外围设备。应用可以利用此功能让附近的设备知道其存在。例如,您可以构建应用,使设备充当计步器或健康监测器,并与其他蓝牙 LE 设备通信其数据。

借助新的 android.bluetooth.le API,您的应用可以广播通告、扫描响应,以及与附近的蓝牙 LE 设备建立连接。如需使用新的广告和扫描功能,请在清单中添加 BLUETOOTH_ADMIN 权限。当用户更新您的应用或从 Play 商店下载您的应用时,系统会要求他们向您的应用授予以下权限:“蓝牙连接信息:允许该应用控制蓝牙,包括向附近的蓝牙设备广播或获取其相关信息”。

如需启动蓝牙 LE 通告以便其他设备能够发现您的应用,请调用 startAdvertising() 并传入 AdvertiseCallback 类的实现。回调对象会收到通告操作成功或失败的报告。

Android 5.0 引入了 ScanFilter 类,以便您的应用可以只扫描其感兴趣的特定类型的设备。如需开始扫描蓝牙 LE 设备,请调用 startScan() 并传入过滤器列表。在方法调用中,您还必须提供 ScanCallback 的实现,以便在发现蓝牙 LE 通告时进行报告。

NFC 增强功能

Android 5.0 添加了以下增强功能,以便更广泛、更灵活地使用 NFC:

  • Android Beam 现已可在分享菜单中找到。
  • 您的应用可以通过调用 invokeBeam() 调用用户设备上的 Android Beam 来共享数据。这样一来,用户无需手动设备接触另一个支持 NFC 的设备即可完成数据传输。
  • 您可以使用新的 createTextRecord() 方法创建一条包含 UTF-8 文本数据的 NDEF 记录。
  • 如果您正在开发一款付款应用,现在可以通过调用 registerAidsForService() 动态注册 NFC 应用 ID (AID)。您还可以使用 setPreferredService() 设置当特定 activity 位于前台时应使用的首选卡模拟服务。

Volta 项目

除了提供新功能外,Android 5.0 还非常重视延长电池续航时间。您可以使用新的 API 和工具了解和优化应用的功耗。

计划排定作业

Android 5.0 提供了新的 JobScheduler API,可让您定义要在稍后时间或指定条件(如设备充电时)下异步运行的作业,从而优化电池续航时间。下列情形下,作业计划排定功能很有用:

  • 应用具有不面向用户并且可以推迟的作业
  • 应用具有您希望在设备接通电源时执行的工作。
  • 应用具有一项需要访问网络或连接到 Wi-Fi 的任务。
  • 应用具有多项您希望定期批量运行的任务。

一个工作单元由一个 JobInfo 对象封装。该对象指定计划排定标准。

使用 JobInfo.Builder 类配置应如何运行计划任务。您可以安排任务在特定条件下运行,例如:

  • 在设备充电时启动
  • 在设备连入无限流量网络时启动
  • 在设备空闲时启动
  • 在特定期限前或以最低延迟完成

例如,您可以添加如下代码,在不按流量计费的网络上运行任务:

Kotlin

val uploadTask: JobInfo = JobInfo.Builder(
        jobId,
        serviceComponent /* JobService component */
).run {
    setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    build()
}
val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
jobScheduler.schedule(uploadTask)

Java

JobInfo uploadTask = new JobInfo.Builder(jobId,
                                         serviceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED)
        .build();
JobScheduler jobScheduler =
        (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

如果设备有稳定的电源(即设备已接通电源 2 分钟以上且电池处于运行状况良好状态),则系统会运行所有已可运行的预定作业,即使作业的截止时间尚未过。

如需查看如何使用 JobScheduler API 的示例,请参阅此版本中的 JobSchedulerSample 实现示例。

电池使用开发者工具

新的 dumpsys batterystats 命令会生成关于设备电池用量的有趣统计数据,这些数据按唯一身份用户 ID (UID) 进行整理。统计数据包括:

  • 电池相关事件的历史记录
  • 设备的全局统计信息
  • 每个 UID 和系统组件的大致耗电量
  • 每个应用的每数据包移动毫秒数
  • 系统 UID 汇总统计信息
  • 应用 UID 汇总统计信息

使用 --help 选项了解用于定制输出的各种选项。例如,如需输出自设备上次充电后某个给定应用软件包的电池用量统计信息,请运行以下命令:

$ adb shell dumpsys batterystats --charged <package-name>

您可以对 dumpsys 命令的输出使用 Battery Historian 工具,以根据日志生成电量相关事件的 HTML 可视化内容。这些信息有助于您更轻松地了解和诊断任何与电池相关的问题。

工作场所和教育领域中的 Android

托管配置

Android 5.0 提供了用于在企业环境中运行应用的新功能。如果用户已有个人账号,设备管理员可以启动托管配置流程,以将共存但独立的受管理资料添加到设备。与受管理资料关联的应用与非受管应用一起显示在用户的启动器、“最近用过”屏幕和通知中。

如需启动托管配置过程,请在 Intent 中发送 ACTION_PROVISION_MANAGED_PROFILE。如果调用成功,系统会触发 onProfileProvisioningComplete() 回调。 然后,您可以调用 setProfileEnabled() 来启用此受管理资料。

默认情况下,受管理资料中只启用一小部分应用。您可以通过调用 enableSystemApp() 在受管理个人资料中安装其他应用。

如果您要开发启动器应用,可以使用新的 LauncherApps 类获取当前用户可启动的 activity 以及任何关联的受管理资料的列表。启动器可以通过向可绘制图标附加工作标记,在视觉上突出显示受管理应用。如需检索带标记的图标,请调用 getUserBadgedIcon()

如需了解如何使用新功能,请参阅此版本中的 BasicManagedProfile 实现示例。

设备所有者

Android 5.0 引入了部署设备所有者应用的功能。设备所有者是一种专门的设备管理员,还可以在设备上创建和移除次要用户以及配置全局设置。您的设备所有者应用可以使用 DevicePolicyManager 类中的方法对受管理设备上的配置、安全性和应用进行精细控制。 一台设备在同一时间只能有一名活动的设备所有者。

如需部署和激活设备所有者,您必须在设备处于未配置状态时执行从编程应用到设备的 NFC 数据传输。此数据传输发送的信息与托管配置中所述的配置 intent 中的信息相同。

固定屏幕

Android 5.0 引入了新的固定屏幕 API,可让您暂时限制用户离开任务或被通知打断。例如,如果您要开发一款教育应用来支持 Android 上的高风险评估要求,或者要开发单一用途应用或自助服务终端应用,则可以使用此方法。应用激活固定屏幕后,在应用退出该模式之前,用户将无法查看通知、访问其他应用或返回主屏幕。

激活固定屏幕的方式有两种:

  • 手动:用户可在设置 > 安全 > 屏幕固定中启用固定屏幕,然后通过触摸“最近使用的应用”屏幕中的绿色大头针图标选择要固定的任务。
  • 以编程方式:如需以编程方式激活固定屏幕,请从应用中调用 startLockTask()。如果发出请求的应用不是设备所有者,系统会提示用户进行确认。设备所有者应用可以调用 setLockTaskPackages() 方法,无需用户确认步骤即可将应用设置为可固定。

激活任务锁定时,会发生以下行为:

  • 状态栏空白,并隐藏用户通知和状态信息。
  • “主屏幕”按钮和“最近用过的应用”按钮处于隐藏状态。
  • 其他应用无法启动新 Activity
  • 当前应用可以启动新 activity,前提是这样做不会创建新任务。
  • 设备所有者调用固定屏幕时,用户会保持锁定到您的应用,直到应用调用 stopLockTask()
  • 如果屏幕固定由非设备所有者的其他应用激活或由用户直接激活,则用户可通过同时按住“返回”和“最近用过”按钮退出。

打印框架

将 PDF 渲染成位图

您现在可以使用新的 PdfRenderer 类将 PDF 文档页面渲染为位图图像以进行打印。您必须指定一个可查找的 ParcelFileDescriptor(即内容可随机访问),系统会在该 ParcelFileDescriptor 上写入可打印内容。应用可以使用 openPage() 获取要渲染的页面,然后调用 render() 将打开的 PdfRenderer.Page 转换为位图。如果您只想将文档的一部分转换为位图图像(例如,为了实现平铺渲染以放大文档),还可以设置其他参数。

如需查看有关如何使用新 API 的示例,请参阅 PdfRendererBasic 示例。

系统

应用使用情况统计信息

现在,您可以使用全新的 android.app.usage API 访问 Android 设备上的应用使用情况历史记录。与已弃用的 getRecentTasks() 方法相比,此 API 提供更详细的使用信息。要使用此 API,您必须先在清单中声明 "android.permission.PACKAGE_USAGE_STATS" 权限。用户还必须通过设置 > 安全 > 具有使用情况访问权限的应用为此应用启用访问权限。

系统按应用收集使用情况数据,按天、周、月和年汇总数据。系统保留这些数据的最长时长如下:

  • 每日数据:7 天
  • 每周数据:4 周
  • 每月数据:6 个月
  • 年度数据:2 年

系统会为每个应用记录以下数据:

  • 最后一次使用应用的时间
  • 在该时间间隔(按天、周、月或年)内应用位于前台的总时长
  • 一天内组件(通过软件包和 activity 名称标识)移至前台或后台时捕获的时间戳
  • 设备配置发生变化(如设备屏幕方向因旋转而发生变化)时捕获的时间戳

测试和无障碍功能

测试与辅助工具改进

Android 5.0 添加了以下测试和无障碍功能支持:

  • 新的 getWindowAnimationFrameStats()getWindowContentFrameStats() 方法可捕获窗口动画和内容的帧统计信息。通过这些方法,您可以编写插桩测试,以评估应用渲染帧的刷新频率是否足以提供流畅的用户体验。
  • 新的 executeShellCommand() 方法可让您通过插桩测试执行 shell 命令。命令的执行方式类似于从连接到设备的主机运行 adb shell,允许您使用基于 shell 的工具,如 dumpsysamcontentpm
  • 使用无障碍功能 API 的无障碍服务和测试工具(例如 UiAutomator)现在可以检索有关视力正常的用户可与之互动的屏幕上窗口属性的详细信息。如需检索 AccessibilityWindowInfo 对象列表,请调用新的 getWindows() 方法。
  • 借助新的 AccessibilityNodeInfo.AccessibilityAction 类,您可以定义要对 AccessibilityNodeInfo 执行的标准或自定义操作。 新的 AccessibilityNodeInfo.AccessibilityAction 类取代了以前在 AccessibilityNodeInfo 中提供的与操作相关的 API。
  • Android 5.0 可对应用中的文字转语音合成进行更精细的控制。新的 Voice 类允许您的应用使用与特定语言区域、质量和延迟时间评分以及文字转语音引擎专属参数相关联的语音配置文件。

IME

更方便的输入语言切换

从 Android 5.0 开始,用户可以更轻松地在平台支持的所有输入法 (IME) 之间切换。执行指定的切换操作(通常是轻触软键盘上的地球图标)可在所有此类 IME 之间循环切换。这一行为变更是通过 shouldOfferSwitchingToNextInputMethod() 方法实现的。

此外,框架现在会检查下一个 IME 是否具有切换机制(并进而检查该 IME 是否支持切换到其后的 IME)。具有切换机制的 IME 不会循环切换到不具有该机制的 IME。这一行为变更是通过 switchToNextInputMethod() 方法实现的。

如需查看如何使用更新后的 IME 切换 API 的示例,请参阅此版本中更新后的软键盘实现示例。如需详细了解如何实现 IME 之间的切换,请参阅创建输入法

清单声明

可声明的必备功能

现在,<uses-feature> 元素中支持以下值,以便您确保仅安装在提供应用所需功能的设备上。

用户权限

现在,<uses-permission> 元素中支持以下权限,以声明您的应用访问某些 API 所需的权限。

  • BIND_DREAM_SERVICE:如果以 API 级别 21 及更高级别为目标平台,Daydream 服务需要此权限,以确保只有系统才能与之绑定。