API 级别:21
Android 5.0 (LOLLIPOP) 为用户和应用开发者提供了新功能本文档介绍了 介绍最值得关注的新 API。
如果您有已发布的应用,请务必查看 Android 5.0 行为 您应在应用中考虑的变化。这些行为变化 可能会影响您的应用在 Android 5.0 设备上,即使您没有使用新的 API 或定位新功能。
如需简要了解新平台的功能,请改为 请参阅 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,同时还支持旧版
方法是向代码添加用于检查系统 API 级别的条件
然后再执行您的 minSdkVersion
不支持的 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
在之前的版本中,
最近用过的屏幕
对于用户与之互动过的每个应用,系统只能显示一项任务
最新状态现在,您的应用可以根据需要打开更多任务,
同时处理多个文档活动借助此功能,您可以更轻松地进行多任务处理,
让用户能够在各个活动与文档之间快速切换
“最近用过”屏幕,在所有应用中提供一致的切换体验。
此类并发任务的示例可能包括 Web 中打开的标签页
浏览器应用、生产力应用中的文档、
例如游戏或即时通讯应用中的聊天内容您的应用可以管理其任务
通过 ActivityManager.AppTask
类实现。
插入逻辑换行符,以便系统将您的 activity 视为新的 activity
请在下列情况下使用 FLAG_ACTIVITY_NEW_DOCUMENT
:
使用 startActivity()
启动 activity。您也可以通过设置
<活动>
元素的 documentLaunchMode
属性设为 "intoExisting"
或
"always"
。
为了避免“最近用过”屏幕杂乱无章,您可以设置一个
任务。为此,请将
<应用>
属性 android:maxRecents
。当前
可指定的上限为每位用户 50 个任务(RAM 较低设备为 25 个)。
“最近使用的应用”屏幕中的任务可以设置为在重新启动后保留。控制
保留行为,请使用
android:persistableMode
属性。您还可以更改
最近使用的应用屏幕中 activity 的视觉属性,如
颜色、标签和图标,通过调用
setTaskDescription()
方法。
WebView 更新
Android 5.0 更新了 WebView
Chromium M37 中增强了安全性和稳定性,
并修复了一些问题默认用户代理字符串
在 Android 5.0 上运行的 WebView
具有
已更新为将 37.0.0.0 作为版本号。
此版本引入了 PermissionRequest
类,
这将允许您的应用授予 WebView
权限
通过 Web API 访问摄像头和麦克风等受保护的资源
(例如 getUserMedia())。您的应用必须具有适当的
Android 权限,以便将这些权限授予
WebView
。
借助新的 onShowFileChooser()
方法,
您现在可以使用 WebView
中的输入表单字段,
并启动文件选择器,以便从 Android 设备中选择图片和文件。
此外,此版本还提供了对 WebAudio、 WebGL 和 WebRTC 开放标准。 要详细了解此版本包含的新功能,请参阅 WebView for Android。
屏幕采集和共享
Android 5.0 可让您添加屏幕截取和屏幕共享功能,
新的 android.media.projection
API 来提升您的应用的性能。此功能
例如,如果您想在视频中启用屏幕共享
会议应用。
新的 createVirtualDisplay()
方法
允许您的应用截取主屏幕(默认
display)传递到 Surface
对象中,然后您的应用就可以将该对象传递到
通过网络发送数据该 API 仅允许截取不安全的屏幕
而不是系统音频要开始截屏,您的应用必须先
使用
Intent
通过
createScreenCaptureIntent()
方法。
如需查看新 API 使用方法的示例,请参阅 MediaProjectionDemo
类。
通知
锁定屏幕通知
Android 5.0 中的锁定屏幕支持 通知。用户可以通过设置选择是否允许 在安全锁定屏幕上显示的敏感通知内容。
您的应用可以控制通知显示时的详细显示级别
安全锁定屏幕上显示的通知。要控制可见性级别,请调用
setVisibility()
和
指定以下某个值:
VISIBILITY_PRIVATE
: 显示基本信息(例如通知图标),但会隐藏 通知的完整内容。VISIBILITY_PUBLIC
: 显示通知的完整内容。VISIBILITY_SECRET
: 不显示任何内容,甚至不显示通知图标。
当可见性级别为 VISIBILITY_PRIVATE
时,
您还可以提供隐去信息后的通知版本
隐藏了个人详细信息的内容。例如,短信应用可能会显示
显示“你有 3 条新短信”的通知但会隐藏消息
内容和发件人。要提供此备用通知,请先创建
使用 Notification.Builder
发送替换通知。时间
创建专用通知对象后,在电子邮件中附上替换通知
通过
setPublicVersion()
方法结合使用。
通知元数据
Android 5.0 使用与应用通知关联的元数据
以更智能的方式对通知进行排序。要设置元数据,请调用
在 Notification.Builder
中实现
构建通知:
setCategory()
:告知系统如何处理应用通知, 设备处于优先级模式(例如,如果通知代表 来电、即时通讯或闹钟)。setPriority()
: 标记通知的重要性高于或低于普通通知。 优先级字段设置为PRIORITY_MAX
或PRIORITY_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 着色器支持 atomics(在 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
属性表示相机的功能级别。
- 所有设备都至少支持
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
硬件级别,具有多项功能 大致相当于已废弃的Camera
API。 - 支持
INFO_SUPPORTED_HARDWARE_LEVEL_FULL
硬件级别的设备可以手动 控制拍摄和后处理,以及拍摄高分辨率图像 高帧速率。
要了解如何使用更新后的
相机
API 中所述,请参阅 Camera2Basic
和 Camera2Video
实现
示例。
音频播放
此版本包含以下变更:
AudioTrack
:
- 您的应用现在可以提供浮点格式的音频数据
(
ENCODING_PCM_FLOAT
)。这个 可实现更大的动态范围、更一致的精度和更多余量。 浮点运算在进行中间计算时特别有用。 播放端点为音频数据使用位深更低的整数格式。 (在 Android 5.0 中,内部管道的某些部分 浮点数。) - 您的应用现在可以以
ByteBuffer
、 与MediaCodec
提供的格式相同。 WRITE_NON_BLOCKING
选项可以简化某些应用的缓冲和多线程处理。
媒体回放控制
使用新的通知和媒体 API 可确保
系统界面了解您的媒体播放情况,并且可以提取并显示专辑封面。
借助新的
MediaSession
和
MediaController
类。
新的 MediaSession
类取代了
已废弃的 RemoteControlClient
类,并提供
用于处理传输控件和媒体按钮的一组回调方法。
如果您的应用提供媒体播放功能并在 Android 设备上运行
TV 或
Wear 平台,请使用
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
类。指定组件
MediaSession
的名称。
MediaBrowser
实例。使用该浏览器实例
然后,您的应用就可以连接到关联的服务并获取
公开了用于播放内容的 MediaSession.Token
对象
访问 Cloud Storage 存储分区。
存储
目录选择
Android 5.0 扩展了 存储访问框架 让用户可以选择整个目录子树,从而为应用授予读/写权限 附加到包含的所有文档中,而无需用户确认。
要选择目录子树,请构建并发送
OPEN_DOCUMENT_TREE
intent。系统会显示所有
DocumentsProvider
实例支持子树选择,
供用户浏览并选择目录返回的 URI 代表
对所选子树的访问权限。然后,您可以使用 buildChildDocumentsUriUsingTree()
和buildDocumentUriUsingTree()
以及
query()
来探索子树。
新的 createDocument()
方法可让您在任何位置创建新文档或目录
子树下的子目录下。如需管理现有文档,请使用
renameDocument()
和
deleteDocument()
。
查看 COLUMN_FLAGS
在发出调用之前验证提供程序是否支持这些调用。
如果您要实现 DocumentsProvider
并希望
以支持子树选择,请实现 isChildDocument()
并包含 FLAG_SUPPORTS_IS_CHILD
在您的COLUMN_FLAGS
中。
Android 5.0 还引入了
共享存储空间,供应用用来存储要加入的媒体文件
MediaStore
。新的
getExternalMediaDirs()
会返回这些路径的路径
目录。类似于
getExternalFilesDir()
,
您的应用无需任何其他权限即可访问返回的路径。通过
平台会定期扫描这些目录中的新媒体,不过您也可以
使用 MediaScannerConnection
明确扫描是否有新的
内容。
无线和网络连接
多个网络连接
Android 5.0 提供了新的多网络 API,让您的应用 动态扫描具有特定功能的可用网络,以及 建立连接如果您的应用 需要使用专用网络,例如 SUPL、彩信或运营商结算网络 或者您想使用特定类型的传输协议发送数据。
如需从应用以动态方式选择并连接到网络,请按以下说明操作 步骤:
- 创建
ConnectivityManager
。 - 使用
NetworkRequest.Builder
类创建NetworkRequest
对象并指定广告网络功能 和传输类型 - 如需扫描合适的网络,请调用
requestNetwork()
或registerNetworkCallback()
,并传入NetworkRequest
对象及其实现ConnectivityManager.NetworkCallback
。使用requestNetwork()
方法(如果您想在检测到合适的网络后主动切换到该网络);接收 仅在不主动切换的情况下发送所扫描网络的通知,请使用registerNetworkCallback()
方法。
当系统检测到合适的网络时,便会连接到网络并
调用
onAvailable()
回调。您可以使用回调中的 Network
对象来
获取有关该网络的更多信息,或将流量引导至
所选网络。
蓝牙低功耗
Android 4.3 引入了 蓝牙低功耗 (Bluetooth LE) 发挥核心作用。在 Android 5.0 中,Android 设备现在可以 充当蓝牙 LE 外围设备。应用可以使用此功能 让附近的设备能够检测到它们。例如,你可以构建应用 可让设备用作计步器或健康监测器, 通过另一个蓝牙 LE 设备传输数据。
新的 android.bluetooth.le
API 可让您的应用广播
查看广告、扫描回复以及通过附近的蓝牙建立连接
LE 设备。要使用新的广告和扫描功能,请将
BLUETOOTH_ADMIN
权限。当用户从 Play 商店更新或下载您的应用时,
系统会要求他们向您的应用授予以下权限:
“Bluetooth connection information: 允许应用控制蓝牙,
包括向附近的蓝牙设备广播或获取其相关信息。"
开始蓝牙 LE 广播,以便其他设备可以发现
调用
startAdvertising()
并传入
AdvertiseCallback
类。回调对象
收到通告操作成功或失败的报告。
Android 5.0 引入了 ScanFilter
类,因此
您的应用只能扫描
它感兴趣的特定设备类型。开始扫描蓝牙
LE 设备,调用 startScan()
并传入过滤条件列表。在方法调用中,您还必须提供一个
ScanCallback
的实现来报告
发现蓝牙 LE 通告。
NFC 增强功能
Android 5.0 添加了这些增强功能,以实现更广、更强大的功能 灵活使用 NFC:
- Android Beam 现已出现在分享菜单中。
- 您的应用可以通过以下方法调用用户设备上的 Android Beam 来分享数据:
正在调用
invokeBeam()
。 这样一来,用户无需手动将设备触碰另一个设备 支持 NFC 的设备完成数据传输。 - 您可以使用新的
createTextRecord()
方法创建一条包含 UTF-8 文本数据的 NDEF 记录。 - 如果您正在开发付款应用,现在可以
通过调用以下代码动态注册 NFC 应用 ID (AID):
registerAidsForService()
。 您还可以使用setPreferredService()
设置首选的卡模拟服务, 。
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 和系统组件的大致耗电量
- 每个应用的每数据包移动 ms
- 系统 UID 汇总统计信息
- 应用 UID 汇总统计信息
使用 --help
选项了解适用于
来调整输出。例如,打印电池用量
自设备上次充电以来给定应用软件包的统计信息,请运行下面的代码
命令:
$ adb shell dumpsys batterystats --charged <package-name>
您可以使用
Battery Historian
工具(针对 dumpsys
命令输出)
根据日志生成 HTML 格式的用电相关事件。这个
这些信息有助于您更轻松地了解和诊断任何电池
相关问题。
工作场所和教育领域中的 Android
托管配置
Android 5.0 为在 Android 设备中 企业环境中答 设备管理员可以 启动托管配置过程,以添加共存但独立的 受管理的个人资料(如果用户当前已拥有个人账号)。 与受管理资料关联的应用会显示在 用户的启动器、“最近使用的应用”屏幕和通知中显示的非受管应用。
要启动托管配置过程,请将
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,前提是这样做不会启动新 activity 创建新任务。
- 当设备所有者请求固定屏幕时,用户会保持锁定状态
直到应用调用
stopLockTask()
。 - 如果固定屏幕是由其他应用(非设备所有者)激活的,或 由用户直接执行,用户可通过同时按住“返回”和“最近用过”按钮退出。
打印框架
将 PDF 渲染成位图
现在,您可以将 PDF 文档页面渲染成位图图像,
使用新的 PdfRenderer
类。您必须指定
可查找的 ParcelFileDescriptor
(即
可以随机访问),系统会在其上写入可打印内容。
您的应用可以通过
openPage()
,然后致电
render()
将打开的 PdfRenderer.Page
转换为位图。您
如果您只想转换
转换为位图图像(例如,
平铺渲染
可放大文档)。
如需查看新 API 使用方法的示例,请参阅 PdfRendererBasic
示例。
系统
应用使用情况统计信息
现在,您可以使用
新的 android.app.usage
API。此 API 提供了更详细的用法
与已弃用的
getRecentTasks()
方法结合使用。
要使用此 API,您必须先声明
"android.permission.PACKAGE_USAGE_STATS"
权限。
用户还必须通过设置 >安全 >应用
以及使用情况访问权限
系统会按应用收集使用情况数据,汇总 每日、每周、每月和每年的数据。时长上限 系统按如下方式保留这些数据:
- 每日数据:7 天
- 每周数据:4 周
- 每月数据:6 个月
- 年度数据:2 年
系统会为每个应用记录以下数据:
- 最后一次使用应用的时间
- 在该时间间隔内应用位于前台的总时长 (按日、周、月或年)
- 组件(由软件包和 activity 名称标识)时记录的时间戳 在一天中被移到前台或后台
- 设备配置发生更改时(例如, 设备屏幕方向因旋转而发生变化)
测试与无障碍
测试与辅助工具改进
Android 5.0 添加了以下支持,以进行测试和 无障碍功能:
- 全新
getWindowAnimationFrameStats()
和getWindowContentFrameStats()
方法会捕获窗口动画和内容的帧统计信息。这些方法 可让您编写插桩测试来评估应用是否会呈现广告 刷新频率足以提供流畅的用户体验。 - 新的
executeShellCommand()
方法,您可以从插桩测试中执行 shell 命令。通过 命令的执行方式与从主机运行adb shell
类似。 可让您使用基于 shell 的工具,例如dumpsys
、am
、content
和pm
。 - 使用无障碍功能 API 的无障碍服务和测试工具
(例如
UiAutomator
) 现在可以检索 与视力正常的用户进行互动的屏幕。要检索AccessibilityWindowInfo
对象,调用新的getWindows()
方法。 - 全新
AccessibilityNodeInfo.AccessibilityAction
类,您可以定义要在对象上执行的标准或自定义操作,AccessibilityNodeInfo
。 全新AccessibilityNodeInfo.AccessibilityAction
类取代了之前在 SDK 中AccessibilityNodeInfo
。 - Android 5.0 提供更精细的
。通过新的
Voice
类,您的应用可以 使用与特定语言区域、质量和延迟时间相关联的语音配置文件 评分和文字转语音引擎专用参数。
IME
更方便的输入语言切换
从 Android 5.0 开始,用户可以更轻松地
所有输入
方法编辑器 (IME)。执行指定的
切换操作(通常是触摸软键盘上的地球图标)循环
所有此类 IME。此行为变更是由
shouldOfferSwitchingToNextInputMethod()
方法。
此外,框架现在会检查下一个 IME 是否包含
(进而判断相应 IME 是否支持切换到
相应的 IME)。一个
具有切换机制的 IME 不会循环切换到不具有该机制的 IME。这个
行为上的改变是通过
switchToNextInputMethod()
方法。
要查看如何使用更新后的 IME 切换 API 的示例,请参阅 更新了此版本中的软键盘实现示例。要详细了解 如何实现 IME 之间的切换,请参阅 创建输入法。
清单声明
可声明的必备功能
现在,
<uses-feature>
元素,这样可以确保您的应用仅安装在符合以下条件的设备上:
提供应用所需的功能
FEATURE_AUDIO_OUTPUT
FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING
FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR
FEATURE_CAMERA_CAPABILITY_RAW
FEATURE_CAMERA_LEVEL_FULL
FEATURE_GAMEPAD
FEATURE_LIVE_TV
FEATURE_MANAGED_USERS
FEATURE_LEANBACK
FEATURE_OPENGLES_EXTENSION_PACK
FEATURE_SECURELY_REMOVES_USERS
FEATURE_SENSOR_AMBIENT_TEMPERATURE
FEATURE_SENSOR_HEART_RATE_ECG
FEATURE_SENSOR_RELATIVE_HUMIDITY
FEATURE_VERIFIED_BOOT
FEATURE_WEBVIEW
用户权限
现在,
<uses-permission>
元素来声明您的应用访问特定 API 所需的权限。
BIND_DREAM_SERVICE
:以 API 为目标平台时 21 及更高级别,则 Daydream 服务; 以确保只有系统才能与之绑定