Android 4.3
欢迎来到 Android 4.3,一个更甜美的 果冻豆 版本!
Android 4.3 包含性能优化和面向用户和开发者的强大新功能。本文件简要介绍了开发者的新增内容。
请参阅 Android 4.3 API 文档,详细了解新的开发者 API。
可在 www.android.com 了解有关用户新增果冻豆功能的更多信息。
更快、更流畅、更灵敏
Android 4.3 基于果冻豆中已包含的性能改进(**垂直同步定时**、**三缓冲**、**降低触摸延迟**、**CPU 输入增强**和**硬件加速 2D 渲染**),并添加了使 Android 速度更快的新优化。
为了提高图形性能,硬件加速的 2D 渲染器现在会**优化绘图命令流**,通过重新排列和合并绘图操作将其转换为更高效的 GPU 格式。对于多线程处理,渲染器现在还可以使用**跨多个 CPU 内核的多线程处理**来执行某些任务。
Android 4.3 还改进了**形状和文本的渲染**。圆形和圆角矩形等形状现在以更高效的方式以更高的质量进行渲染。文本优化包括使用多种字体或复杂字形集 (CJK) 时的性能提升、缩放文本时的更高渲染质量以及更快的投影阴影渲染。
**改进的窗口缓冲区分配** 可为您的应用提供更快的图像缓冲区分配,从而减少创建窗口时开始渲染所需的时间。
为了获得最高性能的图形,Android 4.3 引入了对**OpenGL ES 3.0** 的支持,并通过框架和原生 API 使其可供应用使用。在受支持的设备上,硬件加速的 2D 渲染引擎利用 OpenGL ES 3.0 来优化**纹理管理**并提高**渐变渲染保真度**。
用于高性能图形的 OpenGL ES 3.0
Android 4.3 引入了对 Khronos OpenGL ES 3.0 的平台支持,为受支持设备上的游戏和其他应用提供了最高性能的 2D 和 3D 图形功能。您可以使用**框架 API**或通过 Android 原生开发套件 (NDK) 使用**原生 API 绑定**来利用 OpenGL ES 3.0 和相关的 EGL 扩展。
OpenGL ES 3.0 提供的关键新功能包括高级视觉效果的加速、作为标准功能的高质量 ETC2/EAC 纹理压缩、具有整数和 32 位浮点支持的新版 GLSL ES 着色语言、高级纹理渲染以及标准化的纹理大小和渲染缓冲区格式。
您可以使用 OpenGL ES 3.0 API 创建高度复杂、高效的图形,这些图形可在各种兼容的 Android 设备上运行,并且您可以在这些设备上支持单一标准的纹理压缩格式。
OpenGL ES 3.0 是一项可选功能,取决于底层图形硬件。Nexus 7 (2013)、Nexus 4 和 Nexus 10 设备已提供支持。
增强的蓝牙连接
与蓝牙智能设备和传感器的连接
现在,您可以设计和构建与使用 蓝牙智能技术 的最新一代小型、低功耗设备和传感器交互的应用。
Android 4.3 在核心角色中引入了对**蓝牙智能就绪**的内置平台支持,并提供了一套标准的 API,应用可以使用这些 API 来发现附近的设备、查询 GATT 服务以及读取/写入特性。
使用新的 API,您的应用可以高效地扫描感兴趣的设备和服务。对于每个设备,您可以通过 UUID 检查支持的 GATT 服务,并通过设备 ID 和信号强度管理连接。您可以连接到设备上托管的 GATT 服务器并读取或写入特性,或者注册侦听器以在这些特性发生更改时接收通知。
您可以实现对任何 GATT 配置文件的支持。您可以读取或写入标准特性,或根据需要添加对自定义特性的支持。您的应用可以充当客户端或服务器,并且可以在任一模式下传输和接收数据。API 是通用的,因此您可以支持与各种设备(例如接近标签、手表、健身仪、游戏控制器、遥控器、健康设备等等)的交互。
Nexus 7 (2013) 和 Nexus 4 设备已提供对蓝牙智能就绪的支持,并且未来几个月将会有越来越多的 Android 兼容设备支持此功能。
AVRCP 1.3 配置文件
Android 4.3 添加了对**蓝牙 AVRCP 1.3** 的内置支持,因此您的应用可以支持与远程流媒体设备进行更丰富的交互。媒体播放器等应用可以通过 Android 4.0 中引入的**远程控制客户端 API**来利用 AVRCP 1.3。除了在通过蓝牙连接的远程设备上公开播放控件之外,应用现在还可以传输曲目名称、作曲家和其他类型的媒体元数据等元数据。
对 AVRCP 1.3 的平台支持是基于 Google 和博通在 Android 4.2 中引入的 Bluedroid 蓝牙堆栈构建的。Nexus 设备和其他提供 A2DP/AVRCP 功能的 Android 兼容设备立即提供支持。
对受限配置文件的支持
Android 4.3 扩展了平板电脑的多用户功能,引入了**受限配置文件**这一全新方式来管理单个设备上的用户及其权限。借助受限配置文件,平板电脑所有者可以快速为每个用户设置**独立的环境**,并能够对这些环境中可用应用的权限进行**更精细的控制**。受限配置文件非常适合朋友、家人、访客用户、信息亭、销售点设备等等。
每个受限配置文件都提供一个隔离且安全的空间,拥有自己的本地存储、主屏幕、窗口小部件和设置。与用户不同的是,配置文件是基于所有者已安装的应用和系统账户,从平板电脑所有者的环境中创建的。所有者可以控制在新配置文件中启用哪些已安装的应用,并且默认情况下禁用对所有者账户的访问。
需要访问所有者账户(用于登录、首选项或其他用途)的应用可以通过声明清单属性来选择加入,所有者可以从配置文件设置中查看和管理这些应用。
对于开发者而言,受限配置文件提供了一种为用户提供更多价值和控制权的新方法。您可以实现**应用限制**——您的应用支持的内容或功能控制——并在配置文件设置中向平板电脑所有者宣传这些限制。
您可以使用预定义的布尔型、选择型和多选型直接将应用限制添加到配置文件设置中。如果您需要更大的灵活性,您甚至可以从配置文件设置中启动您自己的UI,以提供任何您想要的限制类型。
当您的应用在配置文件中运行时,它可以检查所有者配置的任何限制并适当地执行这些限制。例如,媒体应用可能会提供一个限制,让所有者为配置文件设置成熟度级别。在运行时,应用可以检查成熟度设置,然后根据首选的成熟度级别管理内容。
如果您的应用并非设计用于受限配置文件,您可以完全选择退出,这样您的应用就无法在任何受限配置文件中启用。
优化的位置和传感器功能
Google Play 服务 提供了可在您的应用中使用的先进位置 API。Android 4.3 在支持新硬件和软件功能的设备上**优化了这些 API**,从而最大限度地减少了电池的使用。
**硬件地理围栏**通过在设备硬件而不是软件中执行位置计算来优化功耗。在支持硬件地理围栏的设备上,Google Play 服务地理围栏 API 将能够利用此优化来节省电池电量,同时设备仍在移动。
**仅限 Wi-Fi 扫描模式**是一种新的平台优化,允许用户在不连接到 Wi-Fi 网络的情况下保持 Wi-Fi 扫描开启,以提高位置精度,同时节省电池电量。依赖 Wi-Fi 提供位置服务的应用现在可以要求用户从 Wi-Fi 高级设置中启用仅限扫描模式。仅限 Wi-Fi 扫描模式不依赖于设备硬件,并且作为 Android 4.3 平台的一部分提供。
新的传感器类型允许应用更好地管理传感器读数。**游戏旋转矢量**允许游戏开发者感知设备的旋转,而无需担心磁场干扰。**未校准陀螺仪**和**未校准磁力计**传感器向应用报告原始测量值以及估计的偏差。
Nexus 7 (2013) 和 Nexus 4 设备上已提供新的硬件功能,任何设备制造商或芯片组供应商都可以将其内置到其设备中。
新的媒体功能
模块化 DRM 框架
为了满足下一代媒体服务的需要,Android 4.3 引入了一个**模块化 DRM 框架**,使媒体应用程序开发者能够更轻松地将其 DRM 集成到他们自己的流协议中,例如 MPEG DASH(基于 HTTP 的动态自适应流,ISO/IEC 23009-1)。
通过结合新的 API 和对现有 API 的增强,媒体 DRM 框架提供了一套**集成的服务**,用于管理许可和预配、访问底层编解码器和解码加密媒体数据。新的 MediaExtractor API 允许您获取 DASH 媒体的 PSSH 元数据。使用媒体 DRM 框架的应用程序管理与许可证服务器的网络通信,并处理从内容库流式传输加密数据。
VP8 编码器
Android 4.3 引入了对**VP8 编码**的内置支持,可通过框架和原生 API 访问。对于使用原生 API 的应用,平台包含**OpenMAX 1.1.2 扩展头文件**以支持 VP8 配置文件和级别。VP8 编码支持包括目标比特率、速率控制、帧速率、令牌分区、错误恢复、重建和循环滤波器的设置。平台 API 在一系列格式中引入了 VP8 编码器支持,因此您可以利用最适合您内容的格式。
在所有运行 Android 4.3 的兼容设备上,软件都提供 VP8 编码。为了获得最高的性能,平台还在功能强大的设备上支持硬件加速的 VP8 编码。
从表面进行视频编码
从 Android 4.3 开始,您可以使用表面作为视频编码器的输入。例如,您现在可以将来自 OpenGL ES 表面的流直接定向到编码器,而无需在缓冲区之间进行复制。
媒体混合器
应用可以使用新的媒体混合器 API 将基本音频和视频流组合到单个输出文件中。目前,应用可以将单个 MPEG-4 音频流和单个 MPEG-4 视频流混合到**单个 MPEG-4 输出文件**中。新的 API 是 Android 4.2 中引入的媒体解复用 API 的对应部分。
远程控制客户端中的播放进度和拖动
自 Android 4.0 以来,媒体播放器和类似的应用程序已经能够从远程控制客户端(例如设备锁屏、通知和通过蓝牙连接的远程设备)提供播放控制。从 Android 4.3 开始,这些应用程序现在还可以通过其远程控制客户端公开播放**进度和速度**,并接收跳转到特定**播放位置**的命令。
构建精美应用的新方法
访问通知
通知长期以来一直是 Android 的一个热门功能,因为它允许用户在一个地方查看来自整个系统的全部信息和更新。现在在 Android 4.3 中,应用可以在用户的许可下**观察通知流**,并以任何他们想要的方式显示通知,包括将它们发送到通过蓝牙连接的附近设备。
您可以通过新的 API 访问通知,这些 API 允许您**注册通知侦听器**服务,并在用户的许可下,在状态栏显示通知时接收通知。通知将完整地传递给您,其中包含有关源应用、发布时间、内容视图和样式以及优先级的所有详细信息。您可以评估通知中的相关字段,处理或添加来自您应用的上下文,并以您选择的任何方式路由它们以进行显示。
当添加、更新和删除通知(无论是由于用户关闭了通知还是源应用撤回了通知)时,新的 API 会为您提供回调。您将能够启动附加到通知或其操作的任何意图,以及将其从系统中关闭,从而允许您的应用为通知提供完整的用户界面。
**用户仍然可以控制**哪些应用可以接收通知。他们可以随时查看设置,查看哪些应用具有通知访问权限,并根据需要**启用或禁用访问权限**。默认情况下禁用通知访问权限——应用可以使用新的 Intent 将用户直接带到设置以在安装后启用侦听器服务。
视图叠加层
您现在可以在视图和视图组之上创建**透明叠加层**,以呈现临时视图层次结构或瞬态动画效果,而不会干扰底层布局层次结构。当您想要创建动画(例如将视图从其容器外部滑动或在屏幕上拖动项目)而不影响视图层次结构时,叠加层特别有用。
光学边界布局模式
一种新的布局模式允许您根据其**光学边界**而不是剪辑边界来管理视图组内视图的位置。剪辑边界表示小部件的实际外边界,而新的光学边界描述了小部件在剪辑边界内出现的位置。您可以使用光学边界布局模式来正确对齐使用阴影和辉光等外部视觉效果的小部件。
自定义旋转动画类型
应用现在可以定义设备旋转时窗口上使用的退出和进入动画类型。您可以设置窗口属性以启用**跳切**、**交叉淡入淡出**或**标准**窗口旋转。当窗口为全屏且未被其他窗口覆盖时,系统会使用自定义动画类型。
屏幕方向模式
应用可以为活动设置新的方向模式,以确保在设备翻转时以正确方向显示它们。此外,应用可以使用一种新模式来**锁定屏幕**到其当前方向。这对于使用相机并希望在拍摄视频时**禁用旋转**的应用非常有用。
用于处理快速回复的意图
Android 4.3 引入了一种新的公共意图,允许任何应用**处理快速回复**——用户响应来电发送的文本消息,而无需接听电话或解锁设备。您的应用可以侦听该意图,并通过您的消息系统将消息发送给呼叫者。该意图包括收件人(呼叫者)以及消息本身。
对国际用户的支持
RTL 改进
Android 4.3 包括 RTL 性能增强和更广泛的 RTL 支持,涵盖框架 UI 小部件,包括 ProgressBar/Spinner 和 ExpandableListView。通过uiautomatorviewer
工具可以看到更多调试信息。此外,更多系统 UI 组件现在都支持 RTL,例如通知、导航栏和操作栏。
为了在 RTL 脚本中提供更好的系统范围体验,更多默认系统应用现在支持 RTL 布局,包括启动器、快速设置、电话、联系人、设置向导、时钟、下载等等。
本地化实用程序
Android 4.3 还包括用于创建更好的 RTL 字符串和测试本地化 UI 的新实用程序和 API。新的**BidiFormatter**类提供了一个简单的 API 用于包装 Unicode 字符串,以便 RTL 脚本数据按预期在 LTR 本地化消息中显示,反之亦然。为了让您在应用中更广泛地使用此实用程序,BidiFormatter API 现在也通过 Android SDK 中的支持包提供给早期平台版本。
为了帮助您管理跨区域设置的日期格式,Android 4.3 包含一个新的**getBestDateTimePattern()**方法,该方法会自动为您指定的区域设置生成 Unicode UTS 日期最佳的本地化形式。这是一种为用户提供更本地化体验的便捷方法。
为了方便您在其他地区更容易地测试您的应用,Android 4.3 引入了伪地区作为新的开发者选项。伪地区模拟与某个地区或语言组相关的语言、文字和显示特性。目前,您可以使用带重音的英语伪地区进行测试,这可以让您了解您的UI在使用各种欧洲语言中使用的文字重音和字符时的运行情况。
辅助功能和UI自动化
从Android 4.3开始,辅助功能服务可以观察和过滤按键事件,例如处理键盘快捷键或提供与基于手势的输入相同的导航功能。服务接收事件,并在将其传递给系统或其他已安装的应用之前根据需要处理它们。
辅助功能服务可以声明新的能力属性来描述其服务的功能以及它们使用的平台功能。例如,它们可以声明过滤按键事件、检索窗口内容、启用触控探索或启用 Web 辅助功能的能力。在某些情况下,服务必须声明能力属性才能访问相关的平台功能。系统使用服务的特性属性为用户生成一个选择加入对话框,以便他们可以在启动前查看并同意这些功能。
基于Android 4.3中的辅助功能框架,新的UI自动化框架允许测试通过模拟用户操作和内省屏幕内容来与设备的UI交互。通过UI自动化框架,您可以执行基本操作、设置屏幕旋转、生成输入事件、截取屏幕截图等等。这是一种强大的方法,可以自动执行现实用户场景中的测试,包括跨越多个应用的操作或序列。
企业和安全
WPA2-Enterprise网络的Wi-Fi配置
应用现在可以配置连接到WPA2企业接入点所需的Wi-Fi凭据。开发人员可以使用新的API配置可扩展身份验证协议(EAP)和封装EAP(第2阶段)凭据,用于企业中使用的身份验证方法。具有访问和更改Wi-Fi权限的应用可以为各种EAP和第2阶段身份验证方法配置身份验证凭据。
使用SELinux加强Android沙箱
Android现在使用SELinux(Linux内核中的强制访问控制(MAC)系统)来增强基于UID的应用程序沙箱。这可以保护操作系统免受潜在的安全漏洞的攻击。
KeyChain增强功能
KeyChain API现在提供了一种方法,允许应用程序确认系统范围的密钥绑定到设备的硬件根信任。这提供了一个创建或存储私钥的地方,即使在根目录或内核受损的情况下,这些私钥也无法导出到设备外部。
Android密钥库提供程序
Android 4.3引入了一个密钥库提供程序和API,允许应用程序创建专用密钥。使用这些API,应用可以创建或存储其他应用无法查看或使用的私钥,并且无需任何用户交互即可将其添加到密钥库。
密钥库提供程序提供了与KeyChain API为系统范围凭据提供的相同安全优势,例如将凭据绑定到设备。密钥库中的私钥无法导出到设备外部。
限制Android应用中的Setuid
现在将/system
分区以nosuid
模式挂载到zygote生成的进程,防止Android应用程序执行setuid
程序。这减少了根攻击面和潜在安全漏洞的可能性。
分析性能的新方法
增强的Systrace日志记录
Android 4.3支持增强版的Systrace工具,该工具更易于使用,并允许您访问更多类型的性能分析应用程序的信息。您现在可以从硬件模块、内核函数、Dalvik虚拟机(包括垃圾回收)、资源加载等等收集跟踪数据。
Android 4.3还包括新的Trace API,您可以在您的应用中使用这些API来标记要使用Systrace开始/结束事件跟踪的代码特定部分。当标记的代码部分执行时,系统会将开始/结束事件写入跟踪日志。对应用程序性能的影响极小,因此报告的计时数据可以准确地显示您的应用程序正在执行的操作。
您可以在Systrace输出文件中以时间轴的形式可视化特定于应用程序的事件,并在其他内核和用户空间跟踪数据的上下文中分析这些事件。结合现有的Systrace标签,自定义应用程序部分可以为您提供新的方法来了解应用程序的性能和行为。
屏幕GPU性能分析
Android 4.3添加了新的开发者选项,可以帮助您分析应用程序的性能,并在任何设备或模拟器上查明渲染问题。
在分析GPU渲染选项中,您现在可以在应用程序运行时在屏幕上可视化应用程序的有效帧率。您可以选择将性能分析数据显示为屏幕上的条形图或线形图,颜色表示创建绘图命令(蓝色)、发出命令(橙色)和等待命令完成(黄色)所花费的时间。系统会连续更新屏幕上的图表,为每个可见的Activity显示一个图表,包括导航栏和通知栏。
一条绿线突出显示了渲染操作的16毫秒阈值,因此您可以根据60 fps的目标评估应用程序的有效帧率(因为1/60秒大约等于16毫秒)。如果您看到超过绿线的操作,您可以使用Systrace和其他工具进一步分析它们。
在运行Android 4.2及更高版本的设备上,开发者选项默认情况下是隐藏的。您随时可以通过在任何兼容的Android设备上点击7次设置 > 关于手机 > 版本号来显示它们。
针对文件URI的StrictMode警告
StrictMode工具的最新补充是一个策略约束,当您的应用程序向系统或其他应用程序公开file://
URI时会发出警告。在某些情况下,接收应用程序可能无法访问file://
URI路径,因此在应用程序之间共享文件时,应使用content://
URI(并具有相应的权限)。此新策略可帮助您发现并修复此类情况。如果您正在寻找一种方便的方法来存储和向其他应用程序公开文件,请尝试使用支持库中提供的FileProvider
内容提供程序。
Android 4.2
欢迎来到Android 4.2,这是最新版本的Jelly Bean!
Android 4.2具有性能优化、更新的系统UI以及面向用户和开发人员的强大新功能。本文档简要介绍了开发人员的新增功能。
请参阅Android 4.2 API文档,详细了解新的开发者API。
可在 www.android.com 了解有关用户新增果冻豆功能的更多信息。
更快、更流畅、更灵敏
Android 4.2基于Jelly Bean中已包含的性能改进——垂直同步计时、三缓冲、降低触摸延迟和CPU输入增强——并添加了新的优化功能,使Android更快。
硬件加速的2D渲染器的改进使常见的动画(如滚动和滑动)更加流畅和快速。特别是,绘图针对图层、剪裁和某些形状(圆角矩形、圆形和椭圆形)进行了优化。
各种WebView渲染优化使网页滚动更加流畅,没有抖动和滞后。
Android的Renderscript Compute是第一个移植到直接在移动设备GPU上运行的计算平台。它会在可能的情况下自动利用GPU计算资源,从而极大地提高图形和图像处理的性能。在支持的设备上使用Renderscript的任何应用程序都可以立即从这种GPU集成中受益,无需重新编译。
改进的、更新的UI
Android 4.2改进了Jelly Bean的用户体验,并将熟悉的Android UI模式(如状态栏、系统栏和通知窗口)带到所有平板电脑上。
所有屏幕尺寸现在都在顶部显示状态栏,并可以通过下拉方式访问通知和新的快速设置菜单。熟悉的系统栏显示在底部,按钮可以轻松地用一只手访问。所有屏幕尺寸均提供应用程序托盘。
一台平板电脑,多个用户
现在多个用户可以共享一台Android平板电脑,每个用户都可以方便地访问专用的用户空间。用户可以从锁屏通过单次触摸切换到他们的空间。
在多用户设备上,Android为每个用户提供单独的环境,包括特定于用户的模拟SD卡存储。用户还拥有自己的主屏幕、窗口小部件、帐户、设置、文件和应用程序,系统会将这些内容分开。所有用户共享核心系统服务,但系统确保每个用户的应用程序和数据保持隔离。实际上,每个多用户都拥有自己的Android设备。
用户可以随时在其自己的环境中安装和卸载应用。为了节省存储空间,Google Play 只有在另一个用户尚未在设备上安装APK时才会下载该APK。如果该应用已安装,Google Play 会像往常一样记录新用户的安装,但不会下载该应用的另一个副本。多个用户可以运行APK的同一副本,因为系统会为每个用户创建一个新实例,包括特定于用户的数据目录。
对于开发人员而言,多用户支持是透明的——您的应用无需执行任何特殊操作即可在多用户环境中正常运行,并且您无需在现有或已发布的APK中进行任何更改。系统在每个用户空间中管理您的应用,就像在单用户环境中一样。
与用户互动的新方法
锁屏小部件
在Android 4.2中,用户可以直接将应用窗口小部件放置在其锁屏上,以便在无需解锁的情况下即时访问喜爱的应用程序内容。用户最多可以添加五个锁屏小部件,从已安装应用程序提供的窗口小部件中进行选择。锁屏在其自己的面板中显示每个小部件,允许用户向左和向右滑动以查看不同的面板及其小部件。
与所有应用小部件一样,锁屏小部件可以显示任何类型的内容,并且可以接受直接的用户交互。它们可以完全独立,例如提供控件来播放音乐的小部件,或者它们可以让用户直接跳转到您应用中的Activity,并在需要时沿途解锁。
对于开发人员而言,锁屏小部件提供了一种与用户互动的新方法。它们可以让您将内容放在用户经常看到的位置,并为您提供更多机会将用户直接带入您的应用。
您可以通过构建新的应用小部件或扩展现有的主屏幕小部件来利用此新功能。如果您的应用已经包含主屏幕小部件,则只需少量更改即可将其扩展到锁屏。为了给用户提供最佳体验,您可以更新小部件以在可用时使用完整的锁屏区域,并在较小的屏幕上根据需要调整大小。您还可以向小部件添加在锁屏上可能特别有用或方便的功能。
Daydream
Daydream 是一种交互式屏幕保护程序模式,当用户的设备停靠或充电时启动。在此模式下,系统会启动 Daydream——由已安装应用提供的远程内容服务——作为设备的屏幕保护程序。用户可以在“设置”应用中启用 Daydream,然后选择要显示的 Daydream。
Daydream 结合了动态壁纸和主屏幕小部件的最佳功能,但功能更强大。它们允许您在全新的环境中提供任何类型的內容,并提供用户交互,例如翻阅照片、播放音频或视频,或只需一次触摸即可直接进入您的应用。
由于 Daydream 可以在设备充电或停靠时自动启动,因此它们还为您的应用提供了一种支持新型用户体验的绝佳方式,例如斜倚模式或展览模式、演示或信息亭模式以及“吸引模式”——所有这些都不需要特殊的硬件。
Daydream 类似于 Activity,并且可以执行 Activity 可以执行的任何操作——从渲染 UI 层次结构(无需使用 RemoteViews)到使用 Canvas、OpenGL、SurfaceTexture 等直接绘图。它们可以播放视频和音频,甚至可以接受直接的用户交互。但是,Daydream 不是 Activity,因此它们不会影响返回堆栈或出现在“最近使用的应用”中,并且不能直接从您的应用启动。
实现 Daydream 非常简单,您可以利用已为应用的其他部分创建的 UI 组件和资源。您可以在应用中提供多个 Daydream,并为每个 Daydream 提供不同的内容和显示设置。
外部显示支持
Android 4.2 引入了对外部显示器的平台支持,这远远超出了镜像功能——应用现在可以将独特的内容定位到连接到 Android 设备的任何一个或多个显示器。应用可以以此为基础,为用户提供新型的交互和娱乐体验。
显示管理器
应用通过新的显示管理器系统服务与显示器交互。您的应用可以枚举显示器并检查每个显示器的功能,包括大小、密度、显示名称、ID、对安全视频的支持等等。当显示器添加或移除,或其功能发生变化时,您的应用还可以接收回调,以便更好地管理您在外部显示器上的内容。
演示窗口
为了方便在外部显示器上显示内容,框架提供了一个名为Presentation的新 UI 对象——一种代表应用内容在特定外部显示器上的窗口的对话框类型。您的应用只需提供要使用的显示器、窗口的主题以及要显示的任何独特内容。Presentation 会处理资源的膨胀,并根据目标显示器的特性渲染您的内容。
Presentation 使您的应用能够完全控制远程显示窗口及其内容,并允许您根据用户输入事件(例如按键、手势、运动事件等)来管理它。您可以使用所有常用工具来创建 UI 和在 Presentation 中渲染内容,从构建任意视图层次结构到使用 SurfaceView 或 SurfaceTexture 直接绘制到窗口中以进行流式内容或摄像头预览。
首选显示选择
当有多个外部显示器可用时,您可以根据需要创建任意数量的 Presentation,每个 Presentation 在特定显示器上显示独特的内容。在许多情况下,您可能只想在单个外部显示器上显示您的内容——但在始终在最适合 Presentation 内容的显示器上显示。为此,系统可以帮助您的应用选择最佳显示器。
要查找最佳显示器,您的应用可以查询显示管理器的系统首选 Presentation 显示器,并在该显示器更改时接收回调。或者,您可以使用在 Android 4.2 中扩展的媒体路由服务,在系统视频路由更改时接收通知。您的应用可以默认在主 Activity 中显示内容,直到连接首选 Presentation 显示器,此时它可以自动切换到首选显示器上的 Presentation 内容。您的应用还可以使用媒体路由的 MediaRouteActionProvider 和 MediaRouteButton 提供标准的显示选择 UI。
受保护的内容
对于处理受保护或加密内容的应用,显示 API 现在报告连接显示器的安全视频功能。您的应用可以查询显示器以了解它是否提供安全视频输出或提供受保护的图形缓冲区,然后选择适当的内容流或解码以使内容可见。对于 SurfaceView 对象的其他安全性,您的应用可以设置安全标志以指示内容永远不会出现在屏幕截图中或非安全显示输出上,即使镜像时也是如此。
无线显示
从 Android 4.2 开始,受支持设备上的用户可以使用 Wi-Fi 连接到外部显示器,使用 Wi-Fi Display(一种符合Miracast™认证程序的点对点无线显示解决方案)。连接无线显示器后,用户可以将任何类型的内容流式传输到更大的屏幕上,包括照片、游戏、地图等等。
应用可以像处理其他外部显示器一样利用无线显示器,无需额外的工作。系统会根据需要管理网络连接并将您的 Presentation 或其他应用内容流式传输到无线显示器。
原生 RTL 支持
Android 4.2 引入了对RTL(从右到左)布局的完整原生支持,包括布局镜像。借助原生 RTL 支持,您可以为所有用户提供相同的出色应用体验,无论他们的语言使用从右到左阅读的文字还是从左到右阅读的文字。
当用户将系统语言切换为从右到左的文字时,系统现在除了对文本元素进行双向镜像以进行阅读和字符输入外,还会自动镜像应用 UI 布局和所有视图小部件。
您的应用只需付出最小的努力即可利用应用中的RTL 布局镜像。如果您希望镜像应用,只需在应用清单中声明一个新属性,并将所有“左/右”布局属性更改为新的“开始/结束”等效项。然后,系统会根据需要处理 UI 的镜像和显示。
为了让您精确控制应用 UI,Android 4.2 包含了新的 API,允许您管理 View 组件中的布局方向、文本方向、文本对齐方式、重力以及区域设置方向。您甚至可以创建自定义版本的布局、绘图资源和其他资源,以便在使用从右到左的文字时显示。
为了帮助您调试和优化自定义从右到左的布局,HierarchyViewer 工具现在允许您查看层次结构中所有 View 的开始/结束属性、布局方向、文本方向和文本对齐方式。
国际语言增强功能
Android 4.2 包含针对国际用户的各种字体和字符优化
- 对于韩国用户,提供了一种新的字体选择——Nanum(나눔글꼴)Gothic,这是一种专门为韩语文字设计的 Unicode 字体。
- 改进了在 WebView 中显示的日语垂直文本的支持。
- 改进了印地语、泰语、阿拉伯语和希伯来语默认字体的字体字距调整和定位。
默认的 Android 键盘还包含一组更新的词典
- 改进了法语(支持双字母组合)、英语和俄语的词典
- 为丹麦语、希腊语、芬兰语、立陶宛语、拉脱维亚语、波兰语、斯洛文尼亚语、塞尔维亚语、瑞典语和土耳其语添加了新的词典
创建精美 UI 的新方法
嵌套片段
为了更好地控制 UI 组件并使其更模块化,Android 4.2 允许您将片段嵌套在片段内。对于任何片段,新的片段管理器允许您将其他片段作为子节点插入到视图层次结构中。
您可以通过多种方式使用嵌套片段,但它们在实现本身是动态且可重用的 UI 组件内的动态且可重用的 UI 组件时尤其有用。例如,如果您使用 ViewPager 创建向左和向右滑动的片段,您现在可以将片段插入到 ViewPager 的每个片段中。
为了让您更广泛地在应用中利用嵌套片段,此功能已添加到最新版本的Android 支持库中。
辅助功能
系统现在帮助辅助功能服务在触摸探索模式下区分触摸探索和辅助功能手势。当用户触摸屏幕时,系统会通知服务已开始通用的触摸交互。然后,它会跟踪触摸交互的速度,并确定它是触摸探索(慢速)还是辅助功能手势(快速),并通知服务。当触摸交互结束时,系统会通知服务。
系统提供了一个新的全局辅助功能选项,允许辅助功能服务根据用户的操作打开快速设置菜单。Android 4.2 中还添加了一种新的辅助功能反馈类型,用于盲文设备。
为了让辅助功能服务深入了解 View 的含义(出于辅助功能目的),框架提供了新的 API,用于将 View 关联为另一个 View 的标签。每个 View 的标签都可通过 AccessibilityNodeInfo 提供给辅助功能服务。
改进的 HDR 相机
Android 4.2 引入了一种新的相机硬件接口和管道,以提高性能。在受支持的设备上,应用可以使用新的HDR 相机场景模式来使用高动态范围成像技术捕获图像。
此外,框架现在提供了一个 API,允许应用检查是否可以禁用相机快门声。然后,应用可以让用户禁用声音或选择标准快门声以外的替代声音,建议这样做。
Renderscript 计算
在 Android 4.2 中,Renderscript Compute 引入了新的脚本功能、新的优化以及直接 GPU 集成,从而在计算操作中实现最高的性能。
Filterscript
Filterscript 是 Renderscript 的一个子集,它专注于针对各种设备芯片组进行优化的图像处理。开发人员可以使用标准 Renderscript 运行时 API 使用 Filterscript 编写他们的图像处理操作,但在更严格的约束下,以确保更广泛的兼容性并在 CPU、GPU 和 DSP 上实现更好的优化。
Filterscript 非常适合硬件加速简单的图像处理和计算操作,例如那些可能为 OpenGL ES 片段着色器编写的操作。因为它对硬件施加了一套宽松的约束,所以您的操作可以在更多类型的设备芯片组上进行优化和加速。任何目标 API 级别为 17 或更高的应用程序都可以使用 Filterscript。
脚本内建函数
在 Android 4.2 中,Renderscript 添加了对一组脚本内建函数的支持——**已加速的预实现过滤原语**,以减少您需要编写的代码量,并确保您的应用获得最大的性能提升。
内建函数适用于混合、模糊、颜色矩阵、3x3 和 5x5 卷积、每个通道的查找表以及将 Android YUV 缓冲区转换为 RGB。
脚本组
您现在可以创建**Renderscript 脚本组**,并通过单个调用执行所有脚本,就像它们是单个脚本的一部分一样。这允许 Renderscript 以单独执行脚本时无法实现的方式优化脚本的执行。
Renderscript 图像处理基准测试在 Galaxy Nexus 设备上仅在 CPU 上运行不同的 Android 平台版本(Android 4.0、4.1 和 4.2)。
Renderscript 图像处理基准测试比较在同一 Nexus 10 设备上使用 GPU + CPU 运行的操作与仅在 CPU 上运行的操作。
如果您有一个要运行的 Renderscript 操作的有向无环图,您可以使用构建器类来创建一个定义操作的脚本组。在执行时,Renderscript 会优化这些操作的运行顺序和连接,以获得最佳性能。
持续的优化改进
当您使用 Renderscript 进行计算操作时,您的应用将受益于 Renderscript 引擎本身的**持续性能和优化改进**,而不会影响您的应用代码或需要重新编译。
随着优化的改进,您的操作将执行得更快,并且可以在更多芯片组上运行,而无需您进行任何操作。右侧的图表重点介绍了 Android 平台连续版本中 Renderscript 优化改进带来的性能提升。
GPU 计算
Renderscript Compute 是第一个移植到直接在移动设备 GPU 上运行的计算平台。它现在会在可能的情况下自动利用**GPU 计算**资源来提高性能。通过 GPU 集成,即使是最复杂的图形或图像处理计算也可以以显著提高的性能执行。
在支持的设备上使用 Renderscript 的任何应用程序都可以立即从这种 GPU 集成中受益,无需重新编译。Nexus 10 平板电脑是第一个支持此集成的设备。
新的内置开发者选项
Android 4.2 系统包含各种新的开发者选项,使创建外观精美且性能良好的应用变得更容易。新的选项公开了从任何设备或模拟器调试和分析您的应用的功能。
在运行 Android 4.2 的设备上,开发者选项默认情况下是隐藏的,有助于为用户创造更好的体验。您可以随时通过在任何兼容的 Android 设备上点击 7 次**设置** > **关于手机** > **内部版本号**来显示开发者选项。
Android 4.2 中的新开发者选项包括:
- **获取错误报告**——立即截取屏幕截图并将设备状态信息转储到本地文件存储,然后将它们附加到新的传出电子邮件中。
- **电源菜单错误报告**——在设备电源菜单和快速设置中添加一个新选项以获取错误报告(见上文)。
- **通过 USB 验证应用**——允许您禁用通过 USB 侧载应用的应用检查,同时仍然检查来自浏览器等其他来源的应用。这可以加快开发过程,同时保持安全功能启用。
- **显示硬件图层更新**——硬件图层更新时闪烁绿色。
- **显示 GPU 过度绘制**——突出显示 GPU 过度绘制区域。
- **强制使用 4x MSAA**——在 Open GL ES 2.0 应用中启用 4x MSAA。
- **模拟辅助显示器**——在当前屏幕上创建一个或多个非安全叠加窗口,用作模拟远程显示器。您可以控制模拟显示器的大小和密度。
- **启用 OpenGL 追踪**——允许您使用 Logcat、Systrace 或 glGetError 上的调用堆栈来追踪 OpenGL 执行。
新的平台技术
Android 4.2 包含各种新的和**增强的平台技术**,以支持各种硬件设备的创新通信用例。在大多数情况下,新的平台技术和增强功能不会直接影响您的应用,因此您可以在没有任何修改的情况下从中受益。
安全增强
每个 Android 版本都包含数十项安全增强功能来保护用户。以下是 Android 4.2 中的一些增强功能:
- **应用程序验证**——用户可以选择启用“验证应用”,并在安装之前由应用程序验证器筛选应用程序。应用验证可以在用户尝试安装可能有害的应用时提醒用户;如果应用程序特别糟糕,则可以阻止安装。
- **更好地控制付费短信**——如果应用程序尝试向使用付费服务的短代码发送短信,这可能会导致额外费用,Android 将提供通知。用户可以选择允许应用程序发送消息或阻止它。
- **始终在线 VPN**——可以配置 VPN,以便在建立 VPN 连接之前,应用程序无法访问网络。这可以防止应用程序通过其他网络发送数据。
- **证书固定**——libcore SSL 实现现在支持证书固定。如果证书没有链接到一组预期的证书,则固定的域将收到证书验证失败。这可以防止证书颁发机构可能被破坏。
- **改进的 Android 权限显示**——权限已组织成用户更容易理解的组。在查看权限期间,用户可以单击权限以查看有关权限的更多详细信息。
- **installd 加固**——installd 守护程序不以 root 用户身份运行,从而减少了 root 权限提升的潜在攻击面。
- **init 脚本加固**——init 脚本现在应用 O_NOFOLLOW 语义以防止与符号链接相关的攻击。
- **FORTIFY_SOURCE**——Android 现在实现了 FORTIFY_SOURCE。系统库和应用程序使用它来防止内存损坏。
- **ContentProvider 默认配置**——目标 API 级别为 17 的应用程序将默认情况下为每个 ContentProvider 设置“export”为“false”,从而减少应用程序的默认攻击面。
- **加密**——修改了 SecureRandom 和 Cipher.RSA 的默认实现以使用 OpenSSL。添加了使用 OpenSSL 1.0.1 的 TLSv1.1 和 TLSv1.2 的 SSLSocket 支持。
- **安全修复**——使用安全修复程序升级了开源库,包括 WebKit、libpng、OpenSSL 和 LibXML。Android 4.2 还包含针对 Android 特定漏洞的修复程序。这些漏洞的信息已提供给开放手机联盟成员,并且 Android 开源项目中提供了修复程序。为了提高安全性,一些运行早期 Android 版本的设备也可能包含这些修复程序。
新的蓝牙堆栈
Android 4.2 引入了一个新的蓝牙堆栈,该堆栈针对 Android 设备进行了优化。这个由 Google 和博通合作开发的新蓝牙堆栈取代了基于 BlueZ 的堆栈,并提供了改进的兼容性和可靠性。低延迟音频
Android 4.2 改进了对低延迟音频播放的支持,从 Android 4.1 版本中使用 OpenSL ES、Soundpool 和音调生成器 API 对音频输出延迟进行的改进开始。这些改进取决于硬件支持——提供这些低延迟音频功能的设备可以通过硬件功能常量向应用宣传其支持。提供了新的 AudioManager API 来查询本机音频采样率和缓冲区大小,用于声明此功能的设备。
新的相机硬件接口
Android 4.2 引入了一个新的相机堆栈实现。相机子系统包括相机流水线中组件的实现,例如带有处理控制的突发模式捕获。新的 NFC 硬件接口和控制器接口
Android 4.2 引入了对基于 NFC 论坛 NCI 标准的控制器的支持。NCI 提供了 NFC 控制器 (NFCC) 和设备主机之间的标准通信协议,并且由 Google 和博通合作开发的新 NFC 堆栈支持它。Dalvik 运行时优化
Dalvik 运行时包含针对更广泛的体系结构的性能和安全增强功能。
- 英特尔的 x86 JIT 支持和 MIPS 的 MIPS JIT 支持。
- 针对具有 > 512MB 内存的设备的优化垃圾收集参数。
- SecureRandom 和 Cipher.RSA 的默认实现现在使用 OpenSSL。
- 通过 OpenSSL 1.0.1 对 TLSv1.1 和 TLSv1.2 的 SSLSocket 支持。
- 对 StrictMath 方法 abs、min、max 和 sqrt 的新的内建函数支持。
- BouncyCastle 更新到 1.47。
- zlib 更新到 1.27。
- dlmalloc 更新到 2.8.6。
Android 4.1
欢迎来到 Android 4.1,这是 Jelly Bean 的第一个版本!
Android 4.1 是迄今为止最快、最流畅的 Android 版本。我们对整个平台进行了改进,并为用户和开发人员添加了很棒的新功能。本文档简要介绍了开发人员的新增内容。
请参阅Android 4.1 API文档,详细了解新的开发者 API。
在www.android.com上了解更多关于 Jelly Bean 用户功能的信息。
更快、更流畅、更灵敏
Android 4.1 经过优化,可在轻松直观的 UI 中提供 Android 最佳性能和最低触控延迟。
为了确保一致的帧率,Android 4.1 将**vsync 定时**扩展到 Android 框架执行的所有绘图和动画。所有内容都与 16 毫秒的 vsync 心跳同步运行——应用程序渲染、触摸事件、屏幕合成和显示刷新——因此帧不会领先或滞后。
Android 4.1 还增加了图形流水线中的**三缓冲区**,以实现更一致的渲染,使从滚动到分页和动画的一切都感觉更流畅。
Android 4.1 不仅通过将**触摸同步**到 vsync 定时来减少触摸延迟,而且还通过实际**预测**您的手指在屏幕刷新时的位置来减少触摸延迟。这导致更具响应性和统一的触摸响应。此外,在一段时间不活动后,Android 会在下一个触摸事件中应用**CPU 输入提升**,以确保没有延迟。
**工具**可以帮助您充分发挥应用的最佳性能。Android 4.1 旨在与名为**systrace**的新工具配合使用,该工具直接从 Linux 内核收集数据,以生成系统活动的整体图片。数据表示为一组垂直堆叠的时间序列图,以帮助隔离渲染中断和其他问题。该工具现在可在Android SDK(Tools R20 或更高版本)中使用。
增强的辅助功能
用于辅助功能服务的新 API 允许您处理手势和管理**辅助功能焦点**,因为用户使用辅助功能手势、附件和其他输入在屏幕元素和导航按钮之间移动。Talkback 系统和触控探索经过重新设计,以使用辅助功能焦点,使其更易于使用,并为开发人员提供一套完整的 API。
辅助功能服务可以将其自己的**教程**链接到辅助功能设置中,以帮助用户配置和使用其服务。
使用标准 View 组件的应用程序会自动**继承对新辅助功能的支持**,而无需更改其代码。使用自定义 View 的应用程序可以使用新的辅助功能节点 API 来指示对辅助功能服务感兴趣的 View 部分。
对国际用户的支持
双向文本和其他语言支持
Android 4.1 通过支持 TextView 和 EditText 元素中的双向文本,帮助您覆盖更多用户。应用程序可以显示文本或处理从左到右或从右到左文字脚本的文本编辑。应用程序可以使用新的阿拉伯语和希伯来语语言环境和相关字体。
其他新型语言支持包括:
- 新增印度语种:卡纳达语、泰卢固语和马拉雅拉姆语
- Unicode 6.0 版本中的新 Emoji 字符
- 针对日语用户的更好字形支持(当系统语言设置为日语时,会渲染日语特有的字形版本)
- 除了 TextView 的阿拉伯文字形外,还为 WebView 优化了阿拉伯文字形
- WebView 中的垂直文本支持,包括 Ruby 文本和附加的垂直文本字形
- 现在所有没有专用粗体字形的字体都可使用合成粗体
用户可安装的键盘映射
平台现在支持用户可安装的键盘映射,例如用于其他国际键盘和特殊布局类型。默认情况下,Android 4.1 包括 27 种国际键盘键盘映射,包括 Dvorak。当用户连接键盘时,他们可以转到“设置”应用程序并选择他们想要为此键盘使用的 一个或多个键盘映射。打字时,用户可以使用快捷键 (ctrl-space) 在键盘映射之间切换。
您可以创建一个应用程序来发布其他键盘映射到系统。APK 将根据标准 Android 键盘映射格式包含键盘布局资源。应用程序可以通过在其清单中声明适用于 ACTION_QUERY_KEYBOARD_LAYOUTS 的广播接收器,向用户提供其他键盘布局。
创建精美 UI 的新方法
可展开的通知
通知长期以来一直是 Android 上的一项独特且受欢迎的功能。开发者可以使用它们将重要信息或基于时间的信息放置在通知栏中,位于应用程序正常 UI 之外,方便用户查看。
Android 4.1 为 Android 通知框架带来了重大更新。应用程序现在可以向用户显示更大、更丰富的通知,这些通知可以通过捏合或滑动来展开和折叠。通知支持新型内容,包括照片,具有可配置的优先级,甚至可以包含多个操作。
通过改进的通知构建器,应用程序可以创建使用更大区域的通知,高度最多可达 256 dp。提供三种模板化通知样式:
- BigTextStyle — 包含多行 TextView 对象的通知。
- BigInboxStyle — 显示任何类型的列表(例如消息、标题等)的通知。
- BigPictureStyle — 展示视觉内容(例如位图)的通知。
除了模板化样式外,您还可以使用任何远程视图创建自己的通知样式。
应用程序最多可以向通知添加三个操作,这些操作显示在通知内容下方。这些操作允许用户通过其他方式直接响应通知中的信息,例如通过电子邮件或电话呼叫,而无需访问应用程序。
使用可展开通知,应用程序可以轻松地按需向用户提供更多信息。用户仍然可以控制,并且可以长按任何通知以获取有关发送者的信息,并可以选择禁用应用程序的进一步通知。
可调整大小的应用程序小部件
Android 4.1 引入了改进的应用程序小部件,这些小部件可以根据用户在主屏幕上放置它们的位置、用户将其扩展到的尺寸以及主屏幕上可用的空间量来自动调整大小。新的应用程序小部件 API 允许您利用这一点来优化应用程序小部件内容,因为小部件的大小会发生变化。
当小部件大小更改时,系统会通知主机应用程序的小部件提供程序,该提供程序可以根据需要重新加载小部件中的内容。例如,小部件可以显示更大、更丰富的图形或其他功能或选项。开发者仍然可以控制最大和最小尺寸,并且可以在需要时更新其他小部件选项。
您还可以为小部件提供单独的横向和纵向布局,系统在屏幕方向更改时会根据需要加载这些布局。
应用程序小部件现在可以通过新的绑定 Intent (AppWidgetManager.ACTION_APPWIDGET_BIND) 在第三方启动器和其他主机应用程序中显示。
简化的任务导航
Android 4.1 使您能够轻松管理用户在应用程序内部可用的“向上”导航,并帮助确保用户获得一致的体验。
您可以通过在应用程序的清单文件中添加新的XML 属性来定义 UI 的各个 Activity 组件的预期向上导航。在运行时,随着 Activity 的启动,系统会从清单文件中提取向上导航树,并自动在操作栏中创建向上功能导航。在清单中声明向上导航的开发者不再需要在运行时通过回调来管理导航,尽管他们也可以根据需要这样做。
还有一个新的TaskStackBuilder 类,可让您快速组合一个合成任务堆栈以立即启动,或在从 PendingIntent 启动 Activity 时使用。当用户从远程视图(例如主屏幕小部件和通知)启动 Activity 时,创建合成任务堆栈尤其有用,因为它允许开发者在返回导航时提供受管理的一致体验。
Activity 启动的轻松动画
您可以使用新的辅助类ActivityOptions 来创建和控制启动 Activity 时显示的动画。通过此辅助类,您可以指定在启动 Activity 时使用的自定义动画资源,或请求新的缩放动画,这些动画从屏幕上您指定的任何矩形开始,并且可以选择包含缩略图位图。
过渡到熄屏和全屏模式
View 中的新系统 UI 标志允许您从正常的应用程序 UI(显示操作栏、导航栏和系统栏)干净地过渡到“熄屏模式”(隐藏状态栏和操作栏,并使导航栏变暗)或“全屏模式”(隐藏状态栏、操作栏和导航栏)。
新型远程视图
开发者现在可以在主屏幕小部件和通知中使用GridLayout 和ViewStub 视图。GridLayout 允许您构建远程视图的内容并使用较浅的 UI 层次结构来管理子视图对齐方式。ViewStub 是一个不可见的、零大小的 View,可用于在运行时延迟加载布局资源。
动态壁纸预览
Android 4.1 使用户更容易查找和安装包含动态壁纸的应用程序中的动态壁纸。如果您的应用程序包含动态壁纸,您现在可以启动一个 Activity (ACTION_CHANGE_LIVE_WALLPAPER),该 Activity 会向用户显示您自己的应用程序中动态壁纸的预览。用户可以从预览直接加载动态壁纸。
更高分辨率的联系人照片
使用 Android 4.1,您可以存储高达 720 x 720 的联系人照片,使联系人更加丰富和个性化。应用程序可以以该大小存储和检索联系人照片,也可以使用任何其他所需大小。特定设备上支持的最大照片大小可能会有所不同,因此应用程序应在运行时查询内置联系人提供程序以获取当前设备的最大大小。
新型输入类型和功能
查找添加和删除的设备
应用程序可以通过 USB、蓝牙或任何其他连接类型注册以在附加任何新的输入设备时收到通知。他们可以根据需要使用此信息来更改状态或功能。例如,游戏可以接收新键盘或操纵杆已连接的通知,指示新玩家的存在。
查询输入设备的功能
Android 4.1 包含允许应用程序和游戏充分利用已连接和可用的所有输入设备的 API。
应用程序可以查询设备管理器以枚举当前连接的所有输入设备并了解每个设备的功能。
控制输入设备上的振动器
除其他功能外,应用程序现在还可以使用与附加输入设备关联的任何振动器服务,例如Rumble Pak 控制器。
动画和图形
应用程序的 Vsync
在 Android 框架中扩展 vsync 会导致更一致的帧率和流畅稳定的 UI。为了使应用程序也能从中受益,Android 4.1 将vsync 定时扩展到应用程序启动的所有绘图和动画。这允许它们优化 UI 线程上的操作,并为同步提供稳定的时间基准。
应用程序可以通过 Android 的动画框架免费利用 vsync 定时。动画框架现在使用 vsync 定时来自动处理动画程序之间的同步。
对于特殊用途,应用程序可以通过新的 Choreographer 类公开的 API 访问 vsync 定时。应用程序可以在下一个 vsync 帧上请求无效化——当应用程序不使用动画框架时,这是一种安排动画的好方法。对于更高级的用途,应用程序可以发布一个回调,Choreographer 类将在下一帧上运行该回调。
新的动画操作和转换类型
动画框架现在允许您定义在运行 ViewPropertyAnimator 动画时要执行的开始和结束操作,以帮助将其与应用程序中的其他动画或操作同步。该操作可以运行任何可运行对象。例如,可运行对象可以指定在之前的动画完成时要启动的另一个动画。
您现在还可以指定 ViewPropertyAnimator 在其动画过程中使用图层。以前,最佳实践是在启动动画之前设置图层,然后处理 onAnimationEnd() 事件以在动画完成时删除图层。现在,ViewPropertyAnimator 上的 withLayer() 方法使用单个方法调用简化了此过程。
LayoutTransition 中的新转换类型使您可以自动执行响应 ViewGroup 中所有布局更改的动画。
新型连接
Android Beam
Android Beam 是一种流行的基于 NFC 的技术,允许用户只需将两部支持 NFC 的手机触碰在一起即可立即共享。
在 Android 4.1 中,Android Beam 通过**利用蓝牙进行数据传输**,简化了图像、视频或其他有效负载的共享。当用户触发传输时,Android Beam 将从 NFC 切换到蓝牙,从而轻松管理文件在一个设备到另一个设备之间的传输。
Wi-Fi 网络服务发现
Android 4.1 引入了对基于多播**DNS 的服务发现**的支持,允许应用程序通过 Wi-Fi 网络查找和连接对等设备提供的服务——包括移动设备、打印机、摄像头、媒体播放器等。开发人员可以利用 Wi-Fi 网络服务发现来构建跨平台或多人游戏和应用程序体验。
使用服务发现 API,应用程序可以创建和注册任何类型的服务,供任何其他启用 NSD 的设备发现。该服务通过网络使用人类可读的字符串标识符进行多播广告,使用户更容易识别服务的类型。
消费类设备可以使用 API 扫描和发现连接到本地 Wi-Fi 网络的设备提供的服务。发现后,应用程序可以使用 API 将服务解析为 IP 地址和端口,通过该端口可以建立套接字连接。
您可以利用此 API 为您的应用程序构建新功能。例如,您可以允许用户连接到网络摄像头、打印机或支持 Wi-Fi 对等连接的另一个移动设备上的应用程序。
Wi-Fi P2P 服务发现
冰淇淋三明治 引入了对 Wi-Fi 对等 (P2P) 的支持,这项技术允许应用程序通过高带宽的对等连接**直接发现和配对**(符合 Wi-Fi 联盟的Wi-Fi Direct™认证计划)。即使没有蜂窝网络或 Wi-Fi 可用,Wi-Fi P2P 也是共享媒体、照片、文件和其他类型的数据和会话的理想方式。
Android 4.1 进一步提升了 Wi-Fi P2P,增加了对**预关联服务发现**的 API 支持。预关联服务发现允许您的应用程序在尝试连接之前,从附近的设备获取有关其支持的服务的更多有用信息。应用程序可以针对特定服务启动发现,并将发现的设备列表过滤为实际支持目标服务或应用程序的那些设备。
例如,这意味着您的应用程序可以仅发现是“打印机”或具有特定游戏可用的设备,而不是发现所有附近的 Wi-Fi P2P 设备。另一方面,您的应用程序可以向其他设备宣传其提供的服务,这些设备可以发现它,然后协商连接。这大大简化了用户的发现和配对过程,并允许应用程序更有效地利用 Wi-Fi P2P。
使用 Wi-Fi P2P 服务发现,您可以创建可以共享照片、视频、游戏玩法、分数或几乎任何其他内容的应用程序和**多人游戏**——所有这些都不需要任何互联网或移动网络。您的用户只需使用直接 P2P 连接即可连接,从而避免使用移动带宽。
网络带宽管理
当设备**连接到计量网络**(包括连接到移动热点)时,Android 4.1 可帮助应用程序适当地**管理数据使用情况**。应用程序可以在开始可能对用户来说相对昂贵的大型下载之前查询当前网络是否已计量。通过 API,您现在可以清楚地了解哪些网络对数据使用敏感,并相应地管理您的网络活动。
新的媒体功能
媒体编解码器访问
Android 4.1 提供对平台硬件和软件编解码器的底层访问。应用程序可以查询系统以发现设备上可用的**底层媒体编解码器**,然后根据需要使用它们。例如,您现在可以创建媒体编解码器的多个实例,排队输入缓冲区,并接收返回的输出缓冲区。此外,媒体编解码器框架支持受保护的内容。应用程序可以查询可用于播放受保护内容的可用编解码器,该编解码器可以使用设备上可用的 DRM 解决方案。
USB 音频
USB 音频输出支持允许硬件供应商构建与 Android 设备接口的硬件,例如**音频扩展坞**。此功能还通过 Android**开放配件开发套件**(ADK) 公开,让所有开发人员都有机会创建自己的硬件。
音频录制触发
Android 现在允许您根据音频播放轨道的完成情况**触发音频录制**。这对于播放音调以提示用户开始说话以录制他们的声音等情况非常有用。此功能可帮助您同步录制,从而避免录制当前正在播放的音频,并防止录制开始得太晚。
多声道音频
Android 4.1 支持具有通过**HDMI 端口**输出硬件多声道音频的设备上的**多声道音频**。多声道音频允许您为游戏、音乐应用程序和视频播放器等应用程序的用户提供丰富的媒体体验。对于没有支持硬件的设备,Android 会自动将音频下混到设备支持的声道数(通常为立体声)。
Android 4.1 还增加了对编码/解码 AAC 5.1 音频的内置支持。
音频预处理
开发人员可以对正在录制的音频应用**预处理效果**,例如应用降噪以提高语音录制质量,应用回声消除以消除声学回声,以及应用自动增益控制以处理音量不一致的音频。需要高质量和清晰音频录制的应用程序将受益于这些预处理器。
音频链路
MediaPlayer 支持**将音频流链接在一起**以播放音频文件而无需暂停。这对于需要音频文件之间无缝过渡的应用程序(例如播放具有连续轨道的专辑的音乐播放器或游戏)非常有用。
媒体路由器
新的 API MediaRouter、MediaRouteActionProvider 和 MediaRouteButton 提供了用于**选择媒体播放位置**的标准机制和 UI。内置支持有线耳机和 a2dp 蓝牙耳机和扬声器,您可以在自己的应用程序中添加自己的路由选项。
Renderscript 计算
Android 4.1 扩展了 Renderscript 计算,为您提供更大的灵活性。您现在可以在 Renderscript 计算脚本中**采样纹理**,并且可以使用新的**pragma**来定义脚本所需的浮点精度。这使您可以启用**NEON 指令**,例如 CPU 路径上的快速向量数学运算,而使用完整的 IEEE 754-2008 标准则无法实现。
您现在可以在**基于 x86 的模拟器和硬件设备上**调试您的 Renderscript 计算脚本。您还可以在单个 Renderscript 源文件中定义多个根样式内核。
Android 浏览器和 WebView
在 Android 4.1 中,Android 浏览器和 WebView 包括以下增强功能:
- 更好的 HTML5 视频用户体验,包括触控播放/暂停以及从内联模式到全屏模式的平滑过渡。
- 改进的渲染速度和降低的内存使用率,可获得更好的滚动和缩放性能。
- 改进的 HTML5/CSS3/Canvas 动画性能。
- 改进的文本输入。
- 更新的 JavaScript 引擎 (V8),可获得更好的 JavaScript 性能。
- 支持更新的 HTML5 媒体捕获规范(input type=file 元素上的“capture”属性)。
Google API 和服务
为了进一步扩展 Android 的功能,可以使用几项新的 Android 服务。
适用于 Android 的 Google Cloud Messaging
Google Cloud Messaging (GCM) 是一项允许开发人员向其 Android 设备上的用户发送**短消息数据**的服务,而无需专有的同步解决方案。
GCM 处理**消息排队和高效交付**的所有细节,目标是 Android 设备。它支持消息**多播**,并且可以使用单个请求同时到达多达 1000 个连接的设备。它还支持消息**有效负载**,这意味着除了向设备上的应用程序发送轻触消息外,开发人员还可以发送最多 4K 的数据。
Google Cloud Messaging 对所有开发人员完全**免费**,注册也很容易。请参阅Google Cloud Messaging页面以获取注册、下载和文档。
应用程序加密
从 Android 4.1 开始,Google Play 将通过在付费应用交付到设备和存储在设备上之前使用设备专用密钥对其进行加密来帮助保护应用程序资产。
智能应用更新
智能应用更新是 Google Play 的一项新功能,它引入了更好的方式来向设备交付**应用更新**。当开发人员发布更新时,Google Play 现在仅向设备交付**已更改的部分**,而不是整个 APK。这使得更新在大多数情况下都更轻量级,因此下载速度更快,可以节省设备的电池电量,并节省用户移动数据计划的带宽使用量。平均而言,智能应用更新的大小约为完整 APK 更新的**三分之一**。
Google Play 服务
Google Play 服务可帮助开发人员将 Google 服务(例如身份验证)集成到他们通过 Google Play 提供的应用程序中。
Google Play 会自动向最终用户设备提供 Google Play 服务,因此您只需要在您的应用程序中使用**精简的客户端库**。
由于您的应用程序仅包含小型客户端库,因此您可以利用这些服务,而不会大幅增加下载大小和存储空间。此外,Google Play 将**定期更新**这些服务,而开发人员无需发布应用程序更新即可利用这些服务。
有关 Google Play 服务中包含的 API 的更多信息,请参阅Google Play 服务开发者页面。