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 级别targetSdkVersion`21`

minSdkVersion

如需详细了解 API 级别的运作方式,请参阅什么是 API 级别?

重要的行为变更

如果您之前发布过 Android 应用,请注意您的应用可能受到 Android 5.0 变化的影响。如需了解完整信息,请参阅 Android 5.0 变更。

界面

Material Design 支持

Android 5.0 添加了对 Android 的新 Material Design 样式的支持。您可以创建具有 Material Design 功能的应用,实现动态视觉效果,利用其中的界面元素转换赋予用户自然的感觉。此支持包括:

- Material Design 主题

- 视图阴影

- widget

- 可绘制动画和造型效果

- Material Design 动画和 Activity 转换效果

- 针对基于视图状态的视图属性的动画生成器

- 可自定义的 UI 小部件和具有可由您控制的调色板的应用栏

- 基于 XML 矢量图形的动画和非动画可绘制对象

如需详细了解如何为您的应用添加 Material Design 功能,请参阅 Material Design。最近使用的应用屏幕中的并发文档和 Activity

在之前的版本中,最近使用的应用屏幕只能为最近与用户交互过的每个应用显示一项任务。现在,您的应用可以根据需要为其他并发文档 activity 打开更多任务。此功能简化了多任务处理,通过在所有应用中提供一致的切换体验,让用户能够在最近使用的应用屏幕中的各个 activity 和文档之间快速切换。此类并发任务的示例可能包括网络浏览器应用中打开的标签页、效率应用中的文档、游戏中并发的比赛或即时通讯应用中的聊天。

您可以通过类管理其任务。documentLaunchMode“intoExisting”、“always”等属性来设置应用程序。为了避免“最近使用的应用”屏幕变得杂乱,您可以在应用中设置该屏幕中显示的任务数上限。为此,请设置 属性 。目前可指定的上限为每位用户 50 个任务(RAM 较低设备为 25 个)。可以将“最近使用的应用”屏幕中的任务设置为在重新启动后保留。如需控制持久化行为,请使用 android:persistableMode 属性。

此外,Android 5.0 还引入了新的 Web API,让您可以为应用添加屏幕截图和屏幕共享功能。例如,如果您想在视频会议应用中启用屏幕共享,便可使用此功能。

新的 方法允许您的应用将主屏幕(默认屏幕)的内容捕获到 对象中,然后您的应用便可以将其发送到整个网络。该 API 仅允许捕获非安全屏幕内容,不允许捕获系统音频。如需开始截取屏幕,您的应用必须先使用通过 方法获得的 启动屏幕截图对话框,请求用户授予权限。

MediaProjectionDemo

通知

锁定屏幕通知

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

您的应用可以控制在安全锁定屏幕上显示的通知中可见信息的详细程度。如需控制可见性级别,请调用 并指定以下值之一:当可视性级别为 时,您还可以提供隐藏个人详情的删减版通知内容。例如,短信应用可能会显示一条通知,指出“您有 3 条新短信”,但是隐藏了短信内容和发件人。如需提供此备用通知,请先使用 创建备用通知。创建专用通知对象时,请通过 方法为其附加替换通知。

通知元数据

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

图形

对 OpenGL ES 3.1 的支持

Android 5.0 添加了 Java 接口和对 OpenGL ES 3.1 的原生支持。OpenGL ES 3.1 中提供的重要新功能包括:计算着色器、单独的着色器对象、间接绘制命令、多重采样和模板纹理、着色语言改进以及用于高级混合模式和调试的扩展程序。向后兼容 OpenGL ES 2.0 和 3.0。要详细了解如何使用 OpenGL ES(包括如何在运行时检查设备支持的 OpenGL ES 版本),请参阅 OpenGL ES API 指南。

Android 扩展包

ANDROID_extension_pack_es31a#extension 该扩展包支持:有保证的着色器存储缓冲区、图像和原子 Fragment 着色器支持(在 OpenGL ES 3.1 中,Fragment 着色器支持是可选的)。

该扩展包提供了以下功能:

1. 镶嵌和几何着色器

2. ASTC (LDR) 纹理压缩格式

3. 每采样内插和着色

4. 帧缓冲区中每个颜色附件采用不同混合模式

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

```xml

...

```

6. 媒体功能。Android 5.0 引入了新的 android.hardware.camera2 API 来简化高级相机功能的使用。您可以使用编程方式访问摄像头设备,并将其连接到特定设备。如需开始拍摄图片,请创建一个 CameraCaptureSession 并指定用于发送已拍摄图片的 Surface 对象。可以配置为进行单张或多张连拍。如需在拍摄新图片时收到通知,请实现 CameraCaptureSession.CaptureCallback 监听器,并在拍摄请求中进行设置。现在,当系统完成图像采集请求时,您的监听器会收到对 CameraCaptureSession.CaptureRequest 的调用,并在 CameraCaptureSession.CaptureCallback 中为您提供图像采集元数据。

7. Class 可以让您的应用检测设备上可用的相机功能。对象的 attributes 属性表示相机的功能级别。

8. Android 5.0 还增加了对音频播放的支持。此版本包含对 MediaPlaylist、MediaPlayer、ExoPlayer 等类的更新和改进。

9. 现在,可以利用新增的 NotificationChannel 和 NotificationManager 类更轻松地在整个界面和服务范围内控制媒体回放。新的 ExoPlayerClass 取代了已废弃的 SimpleExoPlayerClass 类,提供了一组用于处理传输控件和媒体按钮的回调方法。如果您的应用提供媒体播放,并运行在 Android TV 或 Wear 平台上,请使用 ExoPlayerClass,通过同样的回调方法来处理您的传输控制。

10. 您还可以使用新增的 MediaControllerClass 开发自己的媒体控制器应用。该类可通过您的应用的界面进程,以线程安全方式监控和控制媒体回放。创建控制器时,请指定一个 MediaControllerInstance 对象,以便您的应用可与给定 MediaControllerInstance 交互。通过使用 setPlaybackState(PlaybackStateCompat state) 方法,您可以发送播放、暂停、停止等命令来控制该会话上的媒体播放。对于控制器,您还可以注册一个 OnPlaybackStateChangeListener 对象来监听会话中的元数据和状态变化。

此外,您还可以利用新增的类创建允许将回放控制与媒体会话绑定的丰富通知。

如果您想公开应用中的媒体内容,可以扩展MediaBrowserService类。实现时,应提供对getMediaUri()方法的访问权限,以便应用可以播放通过您的服务提供的媒体内容。

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

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

如果需要选择目录子树,请构建并发送intent。系统会显示所有支持子树选择的FileProvider实例,并允许用户浏览和选择目录。返回的URI代表对所选子树的访问权限。然后,您可以使用FileInputStream和FileOutputStream以及ParcelFileDescriptor来探索子树。

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

如果您要实现FileProvider并想支持子树选择,请实现MultiDexApplication类并添加MultiDex.install(this)方法。

Android 5.0还在共享存储空间上引入了新的软件包专属目录,您的应用可在其中放置供加入到DownloadManager.Request中的媒体文件。新的Request.Builder会返回所有共享存储设备上这些目录的路径。与Uri.Builder类似,您的应用无需额外权限便可访问返回的路径。平台会定期扫描这些目录中的新媒体,但您也可以使用requestThumbnail()方法明确扫描是否有新内容。

在 Android 5.0 中,引入了平台支持,使得 Android 设备可以充当蓝牙 LE 外围设备。应用可以利用此功能让附近设备发现它,例如开发计步器或健康监测仪的应用。借助新的 API,应用可以广播通告、扫描响应以及与附近的蓝牙 LE 设备建立连接。要使用新的广告和扫描功能,需要在清单中添加相应的权限。当用户更新应用或从 Play 商店下载应用时,系统会请求他们向应用授予“蓝牙连接信息”的权限。

要启动蓝牙 LE 广播,以便其他设备能够发现应用,需要调用并传入特定类的实现。回调对象会收到广播操作成功或失败的报告。此外,Android 5.0 还引入了类,让应用可以只扫描其感兴趣的特定类型设备。要开始扫描蓝牙 LE 设备,需要调用并传入过滤条件列表。同时,还需要提供特定类的实现,以便在发现蓝牙 LE 通告时进行报告。

NFC 增强功能方面,Android 5.0 添加了一些新特性,使得用户能够更广泛、更灵活地使用 NFC。除了提供新功能外,Android 5.0 还重视电池续航时间的改善。为此,可以使用新的 API 和工具来了解和优化应用的功耗。

计划排定作业方面,Android 5.0 新增了一个 API,允许开发者定义一些系统在稍后或指定条件下(如设备充电时)以异步方式运行的作业,从而优化电池续航时间。这在以下情形下非常有用:应用具有不面向用户并且可以推迟的作业;应用具有您希望在设备接通电源时执行的工作;应用具有一项需要接入网络或连接 WLAN 的任务;应用具有多项您希望定期批量运行的任务。一个工作单元由一个对象封装,该对象指定计划排定标准。使用类可配置应如何运行已排计划的任务。您可以安排任务在特定条件下运行,例如:在设备充电时启动;在设备连入无限流量网络时启动;在设备空闲时启动;在特定期限前或以最低延迟完成。

以下是一个示例代码,用于在不按流量计费的网络上运行任务:如果设备有稳定的电源(即设备已接通电源超过 2 分钟,且电池处于健康水平),系统将运行任何已准备好运行的已安排作业,即使作业的截止时间尚未过。

JobSchedulerSample电池使用开发者工具

dumpsys batterystats

电池相关事件的历史记录

设备的全局统计信息,每个 UID 和系统组件的大致用电量

每个应用的每数据包移动毫秒数

系统 UID 汇总统计信息

应用 UID 汇总统计信息

--help

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

dumpsys

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

托管配置

Android 5.0 提供了用于在企业环境内运行应用的新功能。如果用户已有个人账号,则设备管理员可以启动受管配置过程,以向设备添加共存但独立的 受管理资料。与受管理个人资料关联的应用与非受管理应用一并出现在用户的启动器、最近使用的应用屏幕和通知中。如需启动托管配置流程,请在 中发送 。如果调用成功,系统会触发 回调。 然后您就可以调用 来启用此托管配置文件。默认情况下,受管理个人资料中只有一小部分应用处于启用状态。您可以通过调用 在受管理个人资料中安装其他应用。如果您要开发启动器应用,可以使用新增的 类获取可为当前用户启动的 activity 以及任何关联的受管配置文件的列表。您的启动器可以通过向可绘制图标附加工作标记,在视觉上突出显示受管理的应用。如需检索带徽章的图标,请调用 。

BasicManagedProfile

设备所有者

Android 5.0 引入了部署设备所有者应用的功能。设备所有者是一种专业的设备管理员,具有在设备上创建和移除次要用户以及配置全局设置的额外功能。您的设备所有者应用可以使用 类中的方法对受管设备上的配置、安全性和应用进行精细控制。一台设备在同一时间只能有一名活动的设备所有者。如需部署和激活设备所有者,您必须在设备处于未配置状态时执行从编程应用到设备的 NFC 数据传输。此数据传输发送的信息与托管配置中描述的配置 intent 中发送的信息相同。

固定屏幕

Android 50引入了一个新的固定屏幕API,可让用户暂时限制离开任务或被通知打断。如果您要开发支持高风险评估要求的教育应用或单一用途或信息亭应用,可以使用此API。在激活固定屏幕前,用户无法查看通知、访问其他应用或返回主屏幕。激活固定屏幕有两种方式,并在退出模式前一直锁定用户。当设备所有者调用固定屏幕时,用户将一直锁定于您的应用程序中。如果固定屏幕是由其他应用程序激活,则用户可以通过同时按住“返回”和“最近用过”按钮退出固定屏幕。

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

另外,Android 5.0还改进了应用使用情况统计信息。系统以应用为单位收集使用数据,并按天、周、月和年汇总数据。系统保留这些数据的最长时长如下:每日数据:7天;每周数据:4周;每月数据:6个月;每年数据:2年。系统会为每个应用记录最后一次使用该应用的时间、在该时间间隔内应用位于前台的总时长、一天中组件转入前后台时记录的时间戳以及设备配置发生变化时记录的时间戳。

最后,Android 5.0还添加了测试与无障碍功能支持。例如,IME(输入法编辑器)变得更加方便易用,支持更灵活的输入语言切换。

您好!从 Android 50 开始,用户可以更轻松地在平台支持的所有输入法(IME)之间切换。执行指定的切换操作(通常是触摸软键盘上的地球图标)可在所有此类 IME 中循环切换。这种行为变更是由 switchToNextInputMethod() 方法实现的。此外,框架现在会检查下一个 IME 是否具有切换机制(并进而检查该 IME 是否支持切换到其后的 IME)。具有切换机制的 IME 将不会循环切换到不具有该机制的 IME。此行为变更是由 switchToNextInputMethod() 方法实现的。

如需查看如何使用更新后的 IME 切换 API 的示例,请参阅此版本中更新后的软键盘实现示例。