Android 8.0 为用户和开发者引入多种新功能。本文重点介绍面向开发者的新功能。 请务必查阅 Android 8.0 行为变更以了解平台变更可能影响您的应用的领域。 用户体验通知在 Android 8.0 中,我们已重新设计通知,以便为管理通知行为和设置提供更轻松和更统一的方式。这些变更包括: ![]() 图 1. 用户可以长按应用启动器图标以查看 Android 8.0 中的通知。
自动填充框架帐号创建、登录和信用卡交易需要时间并且容易出错。在使用要求执行此类重复性任务的应用时,用户很容易遭受挫折。 Android 8.0 通过引入自动填充框架,简化了登录和信用卡表单之类表单的填写工作。在用户选择接受自动填充之后,新老应用都可使用自动填充框架。 您可以采取某些措施,优化您的应用使用此框架的方式。如需了解详细信息,请参阅自动填充框架概览。 画中画模式Android 8.0 允许以画中画 (PIP) 模式启动操作组件。PIP 是一种特殊的多窗口模式,最常用于视频播放。目前,PIP 模式可用于 Android TV,而 Android 8.0 则让该功能可进一步用于其他 Android 设备。
当某个 Activity 处于 PIP 模式时,它会处于暂停状态,但仍应继续显示内容。因此,您应确保您的应用在
要指定您的 Activity 可以使用 PIP 模式,请在清单中将 API 变更
Android 8.0 引入一种新的对象 现在,在添加画中画中介绍的现有 PIP 函数可用于所有 Android 设备,而不仅限于 Android TV。此外,Android 8.0 还提供以下函数来支持 PIP 模式:
可下载字体Android 8.0 和 Android 支持库 26 允许您从提供程序应用请求字体,而无需将字体绑定到 APK 中或让 APK 下载字体。此功能可减小 APK 大小,提高应用安装成功率,使多个应用可以共享同一种字体。 如需了解有关下载字体的详细信息,请参阅 可下载字体。 XML 中的字体
Android 8.0 推出一项新功能,即 XML 中的字体,允许您使用字体作为资源。这意味着,不再需要以资产的形式捆绑字体。字体在 在运行 API 版本 14 及更高版本的设备中,支持库 26 对此功能提供完全支持。 如需了解有关以资源形式使用字体以及检索系统字体有关的详细信息,请参阅 XML 中的字体。 自动调整 TextView 的大小Android 8.0 允许您根据 TextView 的大小自动设置文本展开或收缩的大小。这意味着,在不同屏幕上优化文本大小或者优化包含动态内容的文本大小比以往简单多了。如需了解有关如何在 Android 8.0 中自动调整 TextView 的大小的详细信息,请参阅自动调整 TextView 的大小。
自适应图标Android 8.0 引入自适应启动器图标。自适应图标支持视觉效果,可在不同设备型号上显示为各种不同的形状。要了解如何创建自适应图标,请参阅自适应图标预览功能指南。 颜色管理图像应用的 Android 开发者现在可以利用支持广色域彩色显示的新设备。要显示广色域图像,应用需要在其清单(每个操作组件)中启用一个标志,并加载具有嵌入的广域彩色配置文件(AdobeRGB、Pro Photo RGB、DCI-P3 等)的位图。 WebView API
Android 8.0 提供多种 API,帮助您管理在应用中显示网页内容的
要详细了解如何这些 API,请参阅管理 WebView。 固定快捷方式和小部件Android 8.0 引入了快捷方式和微件的应用内固定功能。在您的应用中,您可以根据用户权限为支持的启动器创建固定的快捷方式和小部件。 如需了解详细信息,请参阅固定快捷方式和微件预览功能指南。 最大屏幕纵横比以 Android 7.1(API 级别 25)或更低版本为目标平台的应用默认的最大屏幕纵横比为 1.86。针对 Android 8.0 或更高版本的应用没有默认的最大纵横比。如果您的应用需要设置最大纵横比,请使用定义您的操作组件的清单文件中的 maxAspectRatio 属性。多显示器支持从 Android 8.0 开始,此平台为多显示器提供增强的支持。如果 Activity 支持多窗口模式,并且在具有多显示器的设备上运行,则用户可以将 Activity 从一个显示器移动到另一个显示器。当应用启动 Activity 时,此应用可指定 Activity 应在哪个显示器上运行。 注:如果 Activity 支持多窗口模式,则 Android 8.0 将为该 Activity 自动启用多显示器支持。您应测试您的应用,确保它在多显示器环境下可正常运行。 每次只有一个 Activity 可以处于继续状态,即使此应用具有多个显示器。具有焦点的 Activity 将处于继续状态,所有其他可见的 Activity 均暂停,但不会停止。如需了解有关当多个 Activity 可见时活动生命周期的详细信息,请参阅多窗口生命周期。 当用户将 Activity 从一个显示器移动到另一个显示器时,系统将调整 Activity 大小,并根据需要发起运行时变更。您的 Activity 可以自行处理配置变更,或允许系统销毁包含该 Activity 的进程,并以新的尺寸重新创建它。如需了解详细信息,请参阅处理配置变更。
对 adb shell 进行了扩展,以支持多个显示器。 adb shell start <activity_name> --display <display_id> 统一的布局外边距和内边距
Android 8.0 让您可以更轻松地指定
注:如果您自定义应用逻辑以支持不同语言和文化(包括文本方向),请记住,这些属性不会影响 指针捕获某些应用(例如游戏、远程桌面和虚拟化客户端)将大大受益于鼠标指针控制。指针捕获是 Android 8.0 中的一项新功能,可以通过将所有鼠标事件传递到您的应用中焦点视图的方式提供此类控制。
从 Android 8.0 开始,您的应用中的 如需了解有关如何在您的应用中使用此功能的信息,请参阅指针捕获。 应用类别
在适当的情况下,Android 8.0 允许每个应用声明其所属的类别。这些类别用于将应用呈现给用户的用途或功能类似的应用归类在一起,例如按流量消耗、电池消耗和存储消耗将应用归类。您可以在 Android TV 启动器Android 8.0 添加了一种以内容为中心的全新 Android TV 主屏幕体验,支持 Android TV 模拟器和 Nexus Player Android 8.0 设备映像。新的主屏幕在对应于频道的行中组织视频内容,这些频道在系统上通过应用填充各个节目。应用可以发布多个频道,用户可以配置他们希望在主屏幕上看到哪些频道。Android TV 也包含一个 Watch Next 行,此行根据用户的观看习惯从应用填充节目。应用也可以提供视频预览,这些预览会在用户聚焦到节目时自动播放。用于填充频道和节目的 API 属于 TvProvider API,这些 API 以 Android 支持库模块的形式随 Android 8.0 分发。 AnimatorSet
从 Android 8.0 开始, 输入和导航键盘导航键区如果您的应用中,某个操作组件使用一种复杂的视图层次结构(如图 2 所示),可考虑将多组界面元素组成一个键区,简化键盘导航这些元素的操作。用户可以在 Chromebook 设备上按 Meta+Tab 或 Search+Tab,在不同键区之间导航。键区的一些范例包括:侧面板、导航栏、主内容区域和可能包含多个子元素的元素。 ![]()
要将一个
注:键区不能嵌套,不过,非嵌套键区可以显示在层次结构的不同层级。如果您尝试嵌套键区,框架仅会将最顶层的
在具有触摸屏的设备中,您可以将某个键区指定的 视图默认焦点
在 Android 8.0 中,您可以指定在(重新)创建的操作组件继续运行并且用户按下键盘导航键(例如 Tab 键)之后应接收焦点的 系统新的 StrictMode 检测程序Android 8.0 添加了三个新的 StrictMode 检测程序,帮助识别应用可能出现的错误:
缓存数据
Android 8.0 优化了缓存数据的导航和行为。现在,每个应用均获得一定的磁盘空间配额,用于存储 当系统需要释放磁盘空间时,将开始从超过配额最多的应用中删除缓存文件。因此,如果将您的缓存数据量始终保持低于配额的水平,则在必须清除系统中的某些文件时,您的缓存文件将能坚持到最后。系统在决定删除您的应用中的哪些缓存文件时,将首先考虑删除最旧的文件(由修改时间确定)。 您还可以针对每个目录启用两种新行为,以控制系统如何释放缓存数据:
最后,在需要为大文件分配磁盘空间时,可考虑使用新的 内容提供程序分页我们已更新内容提供程序以支持加载大型数据集,每次加载一页。例如,一个具有大量图像的照片应用可查询要在页面中显示的数据的子集。内容提供程序返回的每个结果页面由一个 Cursor 对象表示。客户端和提供程序必须实现分页才能利用此功能。
如需了解有关内容提供程序变更的详细信息,请参阅 内容刷新请求
现在,
您可以扩展
您的客户端应用可通过调用另一个函数(又称
注:由于您可能通过网络不断请求数据,您应仅在有明显迹象表明内容确已过时时才从客户端调用 JobScheduler 改进
Android 8.0 引入了对
自定义数据存储Android 8.0 允许您为首选项提供自定义数据存储,如果您的应用将首选项存储在云或本地数据库中,或者如果首选项特定于某个设备,此功能会非常有用。如需了解有关实现数据存储的详细信息,请参阅自定义数据存储。 findViewById() 签名变更
现在,
媒体增强功能VolumeShaper有一个新的 VolumeShaper 类。您可以用它来执行简短的自动音量转换,例如淡入、淡出和交叉淡入淡出。 音频焦点增强功能
音频应用通过请求和舍弃音频焦点的方式在设备上共享音频输出。应用通过启动或停止播放或者闪避音量的方式处理处于聚焦状态的变更。有一个新的 媒体指标
新的
为每个实例单独收集指标,并持续到实例的生命周期结束为止。如果没有可用的指标,则此函数将返回 null。返回的实际指标取决于类。 MediaPlayerAndroid 8.0 为 MediaPlayer 类添加了多种新函数。这些函数可以从多个方面增强您的应用处理媒体播放的能力:
MediaPlayer 现在支持采样级加密。 音频录制器
元数据可以用于离线处理。例如,传感器的陀螺仪信号可以用于执行视频稳定操作。
在添加元数据曲目时,曲目的 MIME 格式必须以前缀“application/”开头。除了数据不是来源于
生成的 MP4 文件使用 ISOBMFF 的 12.3.3.2 部分定义的 音频播放控制Android 8.0 允许您查询和请求设备产生声音的方式。对音频播放的以下控制将让您的服务更轻松地仅在有利的设备条件下产生声音。 Google 智能助理的新音频使用类型
设备音频播放的变更
如果您希望自己的服务仅在特定的设备音频配置处于活动状态时开始产生声音,您可以使用 显式请求音频焦点
您的服务可以使用
注:构建您的 增强的媒体文件访问功能
存储访问框架 (SAF) 允许应用显示自定义 但是,访问远程数据源中的大媒体文件面临一些挑战:
Android 8.0 通过改进存储访问框架解决了各个挑战。 自定义文档提供程序从 Android 8.0 开始,存储访问框架允许自定义文档提供程序为驻留在远程数据源中的文件创建可寻址的文件描述符。SAF 可打开文件,获取原生可寻址的文件描述符。然后 SAF 向文档提供程序提交离散字节请求。此功能使文档提供程序可以返回媒体播放器应用请求的准确字节范围,而不必事先缓存整个文件。
要使用此功能,您需要调用新的 直接文档访问
从 Android 8.0 开始,您可以使用
注意: 文档路径
在 Android 8.0 中使用存储访问框架时,您可以根据文档的 ID,使用 此功能在下列情况下特别有用:
注:如果您的应用仅具有路径中某些文档的访问权限,那么 连接WLAN 感知Android 8.0 新增了对 WLAN 感知的支持,此技术基于周边感知联网 (NAN) 规范。在具有相应 WLAN 感知硬件的设备上,应用和附近设备可以通过 WLAN 进行搜索和通信,无需依赖互联网接入点。我们正在与硬件合作伙伴合作,以尽快将 WLAN 感知技术应用于设备。要了解有关如何将 WLAN 感知集成到您的应用中的信息,请参阅 WLAN 感知。 蓝牙Android 8.0 通过增加以下功能,增强了平台对蓝牙的支持:
配套设备配对在尝试通过蓝牙、BLE 和 WLAN 与配套设备配对时,Android 8.0 提供的 API 允许您自定义配对请求对话框。如需了解详细信息,请参阅配套设备配对。 如需了解有关在 Android 上使用蓝牙的详细信息,请参阅蓝牙指南。有关对蓝牙所作的特定于 Android 8.0 的变更,请参阅 Android 8.0 行为变更页面的蓝牙部分。 共享智能共享Android 8.0 了解用户的个性化分享首选项,在通过哪些应用分享各个类型的内容方面,也有着更好的把握。例如,如果用户为一张收据拍照,Android 8.0 可以建议费用跟踪应用;如果用户自拍,一款社交媒体应用可以更好地处理图像。Android 8.0 可以根据用户的个性化首选项自动学习所有这些模式。
智能分享适用于
要启用智能分享,请将具有最多三个字符串注释的 ArrayList<String> annotations = new ArrayList<>(); annotations.add("topic1"); annotations.add("topic2"); annotations.add("topic3"); intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations );
如需了解有关智能分享注释的详细信息,请参阅 智能文本选择在兼容设备上,Android 8.0 让应用可以帮助用户以更有意义的方式与文本交互。当用户长按某个实体中可识别格式的单词(例如某个地址或餐馆名称)时,系统会选中整个实体。用户会看到一个浮动工具栏,该工具栏包含可以处理所选文本实体的应用。例如,如果系统识别出某个地址,它可以将用户导向地图应用。
系统识别的实体包括地址、网址、电话号码和电子邮件地址。如需了解详细信息,请参阅 无障碍功能Android 8.0 支持开发者使用以下无障碍功能创建自己的无障碍服务。如需了解有关如何让您的应用更便于访问的更多信息,请参阅无障碍功能。 无障碍功能按钮
您的无障碍服务现在可以请求在系统的导航区域显示无障碍功能按钮,该按钮让用户可从其设备上的任意位置快速激活您的服务功能。要执行此操作,请在某个
注:此功能仅适用于提供软件渲染导航区域的设备。请始终使用 独立的音量调整
Android 8.0 引入了
要使用这个新的流类型来控制无障碍服务音量,请在无障碍服务中设置 指纹手势您的无障碍服务也可以响应替代的输入机制,即沿设备的指纹传感器按特定方向滑动(上、下、左和右)。要接收有关这些交互的回调,请完成以下一系列步骤:
请记住,并非所有设备都包含指纹传感器。您可以使用 字词级突出显示
要确定
如果您的服务使用
如果您创建自己的 标准化单端范围值
提示文本Android 8.0 包含可用于与文本可编辑对象的提示文本进行交互的多个函数:
连续的手势分派
您的服务现在可以使用 安全性与隐私权限Android 8.0 引入了多个与电话有关的新权限:
新的帐号访问和 Discovery APIAndroid 8.0 对应用访问用户帐号的方式引入多项改进。对于由身份验证器管理的帐号,身份验证器在决定对应用隐藏帐号还是显示帐号时可以使用自己的策略。Android 系统跟踪可以访问特定帐号的应用。
在以前的 Android 版本中,想要跟踪用户帐号列表的应用必须获取有关所有帐号的更新,包括具有不相关类型的帐号。Android 8.0 添加了 API 变更AccountManager 提供六个新函数以帮助身份验证器管理哪些应用可以查看某个帐号:
Android 8.0 引入两个特殊的软件包名称值,以使用
如需了解有关新的帐号访问和发现 API 的详细信息,请参阅 Google Safe Browsing API
测试仪器测试Android 8.0 为应用的仪器测试提供以下几项额外支持。 针对非默认应用进程运行现在,您可以指定针对您的应用的默认进程以外的进程运行特定仪器测试。如果您的应用包含多个在不同进程中运行的操作组件,此配置非常有用。
要定义非默认进程仪器测试,请导航至您的清单文件,然后导航至所需的
在执行仪器测试时,您可以通过调用 在测试过程中报告结果
现在,通过调用 用于测试的模拟 Intent
为了更轻松地为您应用的操作组件创建隔离、独立的界面测试,Android 8.0 引入了
当您的测试类调用 intent 时,该函数将返回一个存根 运行时和工具平台优化Android 8.0 为平台引入了运行时优化和其他优化,这些优化将带来多项性能改进。这些优化包括并发压缩垃圾回收、更有效的内存利用和代码区域。 它们可以加快启动时间,并为 OS 和应用带来更好的性能。 更新的 Java 支持Android 8.0 添加了对更多 OpenJDK Java API 的支持:
要详细了解这些新添加的软件包中的类和函数,请参阅 API 参考文档。 如果您想要在 Android Studio 中使用 Java 8 语言功能,您应下载最新的预览版本。 更新的 ICU4J Android Framework API
Android 8.0 扩展了 ICU4J Android 框架 API—,它是 ICU4J API 的子集—,供应用开发者在 表 1. Android 中使用的 ICU、CLDR 和 Unicode 版本。
Android 企业版已为运行 Android 8.0 的设备引入新的企业功能和 API。重要功能包括如下:
如需详细了解上述及其他新增 Android 企业版 API 和功能,请参阅企业中的 Android。 (责任编辑:卓一哥) |