Android 3.0 API

API 级别11

对于开发者,Android 3.0 平台 (HONEYCOMB) 可作为 Android SDK 的可下载组件提供。可下载平台包括一个 Android 库、系统映像,以及一组模拟器皮肤等。可下载的平台不包含任何外部库。

对于开发者,Android 3.0 平台可作为 Android SDK 的可下载组件提供。可下载平台包含 Android 库、系统映像,以及一组模拟器皮肤等。如需开始针对 Android 3.0 进行开发或测试,请使用 Android SDK 管理器将该平台下载到您的 SDK 中。

API 概览

以下部分从技术上概述了 Android 3.0 中面向开发者的新功能,包括自上一个版本以来框架 API 中的新功能和变化。

fragment

fragment 是一种新的框架组件,可让您将 activity 的不同元素拆分为独立的模块,这些模块定义自己的界面和生命周期。如需创建 fragment,您必须扩展 Fragment 类并实现多个生命周期回调方法,类似于 Activity。然后,您可以在一个 activity 中组合多个 fragment,构建一个多窗格界面,在该界面中,每个窗格都管理自己的生命周期和用户输入。

您也可以使用 fragment 而不提供界面,而是将其用作 activity 的 worker,例如用于管理仅在 activity 运行时发生的下载进度。

此外:

  • fragment 是独立的,您可以在多个 activity 中重复使用它们
  • 您可以在 activity 内添加、移除、替换 fragment 并为其添加动画效果
  • 您可以将 fragment 添加到由 activity 管理的返回堆栈,在 fragment 发生更改时保留其状态,并允许用户在不同的状态之间向后导航
  • 通过提供备用布局,您可以根据屏幕尺寸和方向混合搭配 fragment
  • fragment 可以直接访问其容器 activity,并且可为 activity 的操作栏贡献项(稍后会讨论)

如需管理 activity 中的 fragment,您必须使用 FragmentManager,它提供了多个用于与 fragment 交互的 API,例如在 activity 中查找 fragment 以及从返回堆栈中弹出 fragment 以恢复其先前的状态。

如需执行事务(例如添加或移除 fragment),您必须创建 FragmentTransaction。然后,您可以调用 add()remove()replace() 等方法。应用您要对事务执行的所有更改后,您必须调用 commit(),系统会将 fragment 事务应用于 activity。

如需详细了解如何使用 fragment,请参阅 fragment 文档。 API 演示应用中还提供了几个示例。

操作栏

操作栏取代了 activity 窗口顶部的传统标题栏。界面的左上角包括应用徽标,并为选项菜单中的各项提供了新界面。此外,您还可以使用操作栏:

  • 直接在操作栏中添加菜单项,作为“操作项”。

    在菜单项的 XML 声明中,添加值为 "ifRoom"android:showAsAction 属性。当有足够的空间时,菜单项会直接显示在操作栏中。否则,相应项会被放入溢出菜单中,由操作栏右侧的菜单图标显示。

  • 将操作项替换为 widget(例如搜索框)- 创建“操作视图”。

    在菜单项的 XML 声明中,添加带有布局资源的 android:actionViewLayout 属性或带有 widget 类名称的 android:actionViewClass 属性。(您还必须声明 android:showAsAction 属性,以便该项显示在操作栏中。)如果操作栏中的空间不足,且该项显示在溢出菜单中,则其行为类似于常规菜单项,且不会显示 widget。

  • 向应用徽标添加操作,并将其替换为自定义徽标

    系统会自动为应用徽标分配 android.R.id.home ID,当用户轻触 activity 时,系统会将该 ID 传递给 activity 的 onOptionsItemSelected() 回调。只需在回调方法中响应此 ID 即可执行转到应用的“主屏幕”Activity 等操作。

    如需将图标替换为徽标,请在清单文件中使用 android:logo 属性指定应用徽标,然后在 activity 中调用 setDisplayUseLogoEnabled(true)

  • 添加面包屑导航,以在 fragment 的返回堆栈中向后导航
  • 添加标签页或下拉列表以浏览 fragment
  • 使用主题和背景自定义操作栏

操作栏是所有使用新的全息主题应用的标准操作,当您将 android:minSdkVersionandroid:targetSdkVersion 设置为 "11" 时,该全息主题也是标准操作。

如需详细了解操作栏,请参阅操作栏文档。 API 演示应用中还提供了几个示例。

系统剪贴板

应用现在可以将数据(不仅仅是文本)复制并粘贴到系统级剪贴板,或从系统级剪贴板中粘贴数据。裁剪的数据可以是纯文本、URI 或 intent。

通过向系统提供对您希望用户复制的数据的访问权限(通过 content provider),用户可以从应用中复制复杂内容(如图片或数据结构),并将其粘贴到支持此类内容的其他应用中。

如需开始使用剪贴板,请通过调用 getSystemService(CLIPBOARD_SERVICE) 获取全局 ClipboardManager 对象。

如需将某项内容复制到剪贴板,您需要创建一个新的 ClipData 对象,该对象包含一个或多个 ClipData.Item 对象,每个对象描述一个实体。如需创建仅包含一个 ClipData.ItemClipData 对象,您可以使用其中一个辅助方法(例如 newPlainText()newUri()newIntent()),这些方法都会返回一个预加载了您提供的 ClipData.ItemClipData 对象。

如需将 ClipData 添加到剪贴板,请将它传递给 ClipboardManager 实例的 setPrimaryClip()

然后,您可以通过对 ClipboardManager 调用 getPrimaryClip(),从剪贴板中读取文件(以便粘贴)。处理您收到的 ClipData 可能很复杂,您需要确保自己在尝试粘贴之前可以实际处理剪贴板中的数据类型。

剪贴板一次只保留一段剪辑的数据(ClipData 对象),但一个 ClipData 可以包含多个 ClipData.Item

如需了解详情,请阅读复制和粘贴文档。您还可以在 API 演示示例中查看复制和粘贴的简单实现,并在记事本示例中看到更完整的实现。

拖放

新的 API 简化了应用界面中的拖放操作。拖动操作是指将 ClipData 对象中承载的某种数据从一个位置传输到另一个位置。拖动操作的起点和终点是 View,因此直接处理拖放操作的 API 位于 View 类中。

拖放操作的生命周期由多个拖动操作定义,每个拖动操作都由 DragEvent 对象(如 ACTION_DRAG_STARTEDACTION_DRAG_ENTEREDACTION_DROP)定义。想要参与拖动操作的每个视图都可以监听这些操作。

如需开始拖动 activity 中的内容,请对 View 调用 startDrag(),从而提供一个表示要拖动数据的 ClipData 对象、一个方便用户在拖动时看到的“阴影”的 View.DragShadowBuilder,以及一个可与可能接收该对象的视图分享拖动对象相关信息的 Object

如需接受 View 中的拖动对象(接收“放下”),请通过调用 setOnDragListener()OnDragListener 注册视图。当视图上发生拖动事件时,系统会针对 OnDragListener 调用 onDrag(),后者会收到说明已发生拖动操作类型的 DragEvent(例如 ACTION_DRAG_STARTEDACTION_DRAG_ENTEREDACTION_DROP)。在拖动期间,系统会重复为拖动下方的视图调用 onDrag(),以传递拖动事件流。接收视图可以通过对 DragEvent 调用 getAction() 来查询传递给 onDragEvent() 的事件类型。

注意:虽然拖动事件可能会携带 ClipData 对象,但这与系统剪贴板无关。拖放操作绝不应将拖动的数据放入系统剪贴板。

如需了解详情,请参阅拖放文档。您还可以在 API 演示应用和 Honeycomb Gallery 应用中查看拖放实现。

应用微件

Android 3.0 支持多种新的 widget 类,以便在用户主屏幕上显示更具互动性的应用 widget,包括:GridViewListViewStackViewViewFlipperAdapterViewFlipper

更重要的是,您可以使用新的 RemoteViewsService 通过由远程数据(如来自 content provider)支持的 widget(如 GridViewListViewStackView)来创建具有集合的应用 widget。

AppWidgetProviderInfo 类(在 XML 中使用 <appwidget-provider> 元素定义)还支持两个新字段:autoAdvanceViewIdpreviewImage。借助 autoAdvanceViewId 字段,您可以指定应由应用 widget 的托管应用自动跳转的应用 widget 子视图的视图 ID。previewImage 字段指定应用 widget 的外观预览,并从 widget 选择器向用户显示。如果未提供此字段,则应用 widget 的图标将用于预览。

为了帮助为应用 widget 创建预览图片(要在 previewImage 字段中指定),Android 模拟器包含一个名为“Widget Preview”的应用。如需创建预览图片,请启动此应用,为您的应用选择应用 widget,并设置您想要的预览图片显示方式,然后将其保存并放置在应用的可绘制资源中。

您可以在 StackView 应用微件天气列表微件应用中查看新应用微件功能的实现。

状态栏通知

Notification API 已经过扩展,可支持更多内容丰富的状态栏通知;此外,新的 Notification.Builder 类可让您轻松创建 Notification 对象。

新功能包括:

  • 使用 setLargeIcon() 在通知中使用大图标。这通常是为了社交应用显示通知来源的人员的联系人照片,或媒体应用显示影集缩略图。
  • 使用 setTicker() 支持在状态栏置顶栏中显示自定义布局。
  • 支持自定义通知布局以包含带有 PendingIntent 的按钮,以实现互动性更强的通知 widget。例如,通知可以在不启动 activity 的情况下控制音乐播放。

内容加载器

新的框架 API 支持使用 Loader 类异步加载数据。您可以将其与界面组件(如视图和 fragment)结合使用,以从工作器线程动态加载数据。CursorLoader 子类经过专门设计,可协助您针对由 ContentProvider 提供支持的数据执行此操作。

您只需实现 LoaderCallbacks 接口,以便在收到新加载器请求或数据发生更改时接收回调,然后调用 initLoader() 为您的 activity 或 fragment 初始化该加载器。

如需了解详情,请阅读加载器文档。您还可以查看 LoaderCursor LoaderThrottle 示例中的使用加载器的示例代码。

蓝牙 A2DP 和耳机 API

Android 现在包含一些 API,供应用验证已连接的蓝牙 A2DP 和耳机配置文件设备的状态。例如,应用可以识别何时连接蓝牙耳机以听音乐,并在适当情况下通知用户。应用还可以接收供应商专用 AT 命令的广播,并向用户通知已连接设备的状态,例如所连接设备的电池电量不足。

您可以使用 A2DPHEADSET 配置文件常量和 BluetoothProfile.ServiceListener 调用 getProfileProxy(),以在蓝牙客户端连接或断开连接时接收回调,从而初始化相应的 BluetoothProfile

动画框架

借助全新的灵活动画框架,您可以为任何对象(View、Drawable、Fragment、Object 或任何其他对象)的任意属性添加动画效果。您可以使用它定义动画的多个方面,例如:

  • 时长
  • 重复数量和行为
  • 时间插值类型
  • Animator 设置为一起播放动画、按顺序播放或在指定的延迟后播放动画
  • 帧刷新延迟

默认情况下,您可以为对象的 int、浮点数和十六进制颜色值定义这些动画切面和其他。也就是说,当某个对象具有其中一种类型的属性字段时,您可以随着时间的推移更改其值以影响动画。若要为任何其他类型的值添加动画效果,您可以通过实现 TypeEvaluator 接口来告知系统如何计算指定类型的值。

您可以使用以下两个 Animator 为属性的值添加动画效果:ValueAnimatorObjectAnimatorValueAnimator 会计算动画值,但并不知道会因此添加动画效果的特定对象或属性。它仅执行计算,您必须监听更新并使用自己的逻辑处理数据。ObjectAnimatorValueAnimator 的子类,可用于设置要添加动画效果的对象和属性,并可处理所有动画工作。也就是说,您需要为 ObjectAnimator 提供要添加动画效果的对象、随时间变化的对象属性以及一组要随时间应用于该属性的值,然后启动动画。

此外,LayoutTransition 类还会针对您对 activity 布局的更改启用自动转换动画。如需为布局的一部分启用过渡,请创建一个 LayoutTransition 对象,并通过调用 setLayoutTransition() 在任意 ViewGroup 上设置该对象。这样,每当向组中添加项或从组中移除项时,系统都会运行默认动画。如需指定自定义动画,请对 LayoutTransition 调用 setAnimator() 并提供自定义 Animator,例如上面讨论的 ValueAnimatorObjectAnimator

如需了解详情,请参阅属性动画文档。您还可以使用 API 演示应用中的动画 API 查看多个示例。

扩展的界面框架

  • ListView 和 GridView 的多选选择

    setChoiceMode() 的新 CHOICE_MODE_MULTIPLE_MODAL 模式允许用户从 ListViewGridView 中选择多个项。与操作栏结合使用时,用户可以选择多项内容,然后从操作栏(已转换为多选操作模式)中的选项列表选择要执行的操作。

    如需启用单选题,请调用 setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) 并向 setMultiChoiceModeListener() 注册 MultiChoiceModeListener

    当用户长按某项时,操作栏会切换到多选操作模式。当系统通过调用 onItemCheckedStateChanged() 选择列表项时,系统会通知 MultiChoiceModeListener

    如需查看多选选项的示例,请参阅 API 演示示例应用中的 List15.java 类。

  • 用于转换视图的新 API

    借助新的 API,您可以轻松对 activity 布局中的视图应用 2D 和 3D 转换。利用一组对象属性(用于定义视图的布局位置、方向、透明度等)可实现新转换。

    用于设置视图属性的新方法包括:setAlpha()setBottom()setLeft()setRight()setBottom()setPivotX()setPivotY()setRotationX()setRotationY()setScaleX()setScaleY()setAlpha() 等。

    某些方法还有对应的 XML 属性,您可以在布局文件中指定该属性,以应用默认转换。可用属性包括:translationXtranslationYrotationrotationXrotationYscaleXscaleYtransformPivotXtransformPivotYalpha

    通过将其中一些新的视图属性与新的动画框架(如上所述)结合使用,您可以轻松地将一些精美的动画应用到您的视图。例如,如需沿 y 轴旋转视图,请为 ObjectAnimator 提供 View、“rotationY”属性以及起始值和结束值:

    Kotlin

    ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply {
        duration = 2000
        start()
    }
    

    Java

    ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
    animator.setDuration(2000);
    animator.start();
    
  • 新的全息主题

    我们重新设计了标准的系统 widget 和整体外观,并纳入了新的“全息”界面主题。系统使用标准的样式和主题系统应用新的主题。

    默认情况下,通过将 android:minSdkVersionandroid:targetSdkVersion 值设置为 "11" 以 Android 3.0 平台为目标平台的任何应用都会继承全息主题。不过,如果您的应用还应用了自己的主题,那么主题将替换全息主题,除非您更新样式以继承全息主题。

    如需将全息主题应用于各个 activity,或在您自己的主题定义中继承它们,请使用若干新的 Theme.Holo 主题之一。如果您的应用与低于 3.0 的 Android 版本兼容并应用自定义主题,那么您应根据平台版本选择主题

  • 新微件
    • AdapterViewAnimator

      在其视图之间切换时执行动画的 AdapterView 的基类。

    • AdapterViewFlipper

      简单的 ViewAnimator,在添加到它的两个或多个视图之间添加动画效果。一次只显示一个孩子。如果收到请求,它可以按固定间隔自动在每个子节点之间进行翻转。

    • CalendarView

      允许用户通过轻触日期从日历中选择日期,并可将日历滚动或快速滑动到所需的日期。您可以在微件中配置可用日期范围。

    • ListPopupWindow

      将自身锚定到宿主视图,并显示选项列表,例如,在向 EditText 视图中输入内容时提供建议列表。

    • NumberPicker

      允许用户从预定义的范围中选择一个数字。该 widget 呈现一个输入字段以及用于选择数字的向上和向下按钮。触摸输入字段可让用户滚动浏览值,或再次轻触即可直接修改当前值。此外,它还允许您将位置映射到字符串,以便显示相应的字符串(而不是索引位置)。

    • PopupMenu

      在锚定到视图的模态弹出式窗口中显示 Menu。如果空间足够,弹出窗口会显示在锚点视图下方;如果没有空间,则弹出窗口会显示在其上方。如果 IME(软键盘)可见,则在用户轻触菜单之前,弹出式窗口不会将其与 IME 重叠。

    • SearchView

      提供一个搜索框,您可以对其进行配置,以将搜索查询传递给指定的 activity,并显示搜索建议(与传统搜索对话框相同)。此 widget 特别适用于在操作栏中提供搜索 widget。如需了解详情,请参阅创建搜索界面

    • StackView

      一种视图,可在 3D 堆栈中显示其子项,并允许用户像 rolodex 一样滑动浏览视图。

图形

  • 硬件加速 2D 图形

    现在,您可以通过在清单元素的 <application> 元素中或为各个 <activity> 元素中设置 android:hardwareAccelerated="true",为您的应用启用 OpenGL 渲染程序。

    此标志有助于提高应用的绘制速度。这样可以带来更流畅的动画和更流畅的滚动体验,并提高整体的性能和对用户互动的响应速度。

  • 查看对硬件层和软件层的支持

    默认情况下,View 未指定图层。您可以使用 setLayerType()layerType 属性来指定视图由硬件层或软件层提供支持(由值 LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE 指定)。

    硬件层由硬件专用纹理(通常是 OpenGL 硬件上的帧缓冲区对象或 FBO)提供支持,并促使使用 Android 的硬件渲染管道渲染视图,但前提是为视图层次结构启用了硬件加速。停用硬件加速时,硬件层的行为将与软件层完全相同。

    软件层由位图提供支持,并且会导致使用 Android 的软件渲染管道渲染视图,即使启用了硬件加速也是如此。如果受影响的视图树经常更新,应避免使用软件层。每次更新都需要重新渲染软件层,这可能会很慢。

    如需了解详情,请参阅 LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE 文档。

  • Renderscript 3D 图形引擎

    Renderscript 是一个运行时 3D 框架,提供用于构建 3D 场景的 API 以及一种独立于平台的特殊着色器语言,以实现最佳性能。利用 Renderscript,您可以加快图形操作和数据处理。Renderscript 是为应用、壁纸、轮播界面等打造高性能 3D 效果的理想方式。

    如需了解详情,请参阅使用 Renderscript 进行 3D 渲染和计算文档。

媒体

  • “延时摄影”视频

    Camcorder API 现在支持录制延时摄影视频。setCaptureRate() 设置应捕获帧的速率。

  • 对图像流的纹理支持

    新的 SurfaceTexture 允许您将图像流捕获为 OpenGL ES 纹理。通过为 Camera 实例调用 setPreviewTexture(),您可以指定用于从相机绘制视频播放或预览帧的 SurfaceTexture

  • HTTP 直播

    应用现在可以将 M3U 播放列表网址传递给媒体框架,以开始 HTTP 直播会话。媒体框架支持大多数 HTTP 直播规范,包括自适应比特率。如需了解详情,请参阅支持的媒体格式文档。

  • EXIF 数据

    ExifInterface 包含有关照片光圈、ISO 和曝光时间的新字段。

  • 摄像机个人资料

    借助新的 hasProfile() 方法和多个视频画质配置文件(例如 QUALITY_1080PQUALITY_720PQUALITY_CIF 等),您可以确定摄像机画质选项。

  • 数字媒体文件传输

    该平台内置了对 USB 媒体/图片传输协议 (MTP/PTP) 的支持,可让用户轻松地在设备之间传输任何类型的媒体文件到主机计算机。开发者可以在此支持的基础上构建一些应用,使用户能够创建或管理他们可能想在设备间传输或共享的富媒体文件。

  • 数字版权管理 (DRM)

    用于检查和行使数字权利的全新可扩展数字版权管理 (DRM) 框架。它在以下两个架构层中实现:

    • DRM Framework API:提供给应用,并通过标准应用的 Dalvik 虚拟机运行。
    • 原生代码 DRM 管理器:用于实现框架 API,并为 DRM 插件提供接口,以便处理各种 DRM 方案的版权管理和解密操作。

    对于应用开发者,该框架提供了一个抽象的统一 API,可简化受保护内容的管理。该 API 可以降低 DRM 操作的复杂性,并为受保护和不受保护的内容以及各种 DRM 方案提供一致的操作模式。

    对于设备制造商、内容所有者和互联网数字媒体提供商,DRM 框架的插件 API 提供了一种方法,让您能够在 Android 系统中添加对所选 DRM 方案的支持,从而安全地强制执行内容保护。

    预览版不提供任何用于检查和强制执行数字权利的原生 DRM 插件。不过,设备制造商可能会在其设备上随附 DRM 插件。

    您可以在 android.drm 软件包中找到所有 DRM API。

键盘支持

  • 支持 Control、Meta、Caps Lock、Num Lock 和 Scroll Lock 修饰符。如需了解详情,请参阅 META_CTRL_ON 和相关字段。
  • 支持完整的桌面式键盘,包括支持 Esc、Home、End、Delete 等键。您可以通过查询 getKeyboardType() 并检查 KeyCharacterMap.FULL 来确定按键事件是否来自全键盘
  • TextView 现在支持基于键盘的剪切、复制、粘贴和全选(使用 Ctrl+X、Ctrl+C、Ctrl+V 和 Ctrl+A)组合键。它还支持 PageUp/PageDown、Home/End 和基于键盘的文本选择。
  • KeyEvent 添加了几种新方法,可让您更轻松地以正确且一致的方式检查按键修饰符的状态。请参阅 hasModifiers(int)hasNoModifiers()metaStateHasModifiers()metaStateHasNoModifiers()
  • 应用可以通过创建 ActivityDialogView 的子类并实现 onKeyShortcut() 来实现自定义键盘快捷键。每当某个按键与 Ctrl 键组合时,框架都会调用此方法。创建选项菜单时,您可以通过为每个 <item> 元素设置 android:alphabeticShortcutandroid:numericShortcut 属性(或使用 setShortcut())来注册键盘快捷键。
  • Android 3.0 包含一个新的“虚拟键盘”设备,其 ID 为 KeyCharacterMap.VIRTUAL_KEYBOARD。虚拟键盘具有桌面设备样式的 US 按键映射,可用于合成用于测试输入的按键事件。

拆分触摸事件

以前,一次只能有一个视图接受触摸事件。Android 3.0 支持跨视图甚至窗口拆分触摸事件,因此不同视图可以接受同时发生的触摸事件。

如果应用以 Android 3.0 为目标平台,拆分触摸事件默认处于启用状态。也就是说,当应用已将 android:minSdkVersionandroid:targetSdkVersion 属性的值设置为 "11" 时。

不过,通过以下属性,您可以停用特定视图组内的视图和窗口之间拆分触摸事件的功能。

  • 借助视图组的 android:splitMotionEvents 属性,您可以停用在布局中的子视图之间发生的拆分触摸事件。例如:
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>
    

    这样,线性布局中的子视图无法拆分触摸事件,一次只能有一个视图接收触摸事件。

  • 借助 android:windowEnableSplitTouch 样式属性,您可以将轻触事件应用于 activity 或整个应用的主题,从而停用各个窗口的分屏触摸事件。例如:
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>
    

    将此主题应用于 <activity><application> 时,仅接受当前 activity 窗口中的触摸事件。例如,通过停用跨窗口拆分触摸事件,系统栏无法与 activity 同时接收触摸事件。这不会影响 activity 内的视图是否可以拆分触摸事件 - 默认情况下,activity 仍然可以在视图之间拆分触摸事件。

    如需详细了解如何创建主题,请参阅应用样式和主题

WebKit

  • 新增了 WebViewFragment 类,用于创建由 WebView 组成的 fragment。
  • 新增了 WebSettings 方法:
    • setDisplayZoomControls() 可让您隐藏屏幕上的缩放控件,同时仍允许用户使用手指手势进行缩放(必须将 setBuiltInZoomControls() 设置为 true)。
    • 新的 WebSettings 方法 setEnableSmoothTransition() 可让您在进行平移和缩放时实现平滑过渡。启用后,WebView 将选择一个解决方案来最大限度地提高性能(例如,WebView 的内容可能不会在过渡期间更新)。
  • 新增了 WebView 方法:
    • onPause() 回调,以便在 WebView 变为隐藏状态时暂停与 WebView 相关联的任何处理。当 WebView 未在前台运行时,这有助于减少不必要的 CPU 或网络流量。
    • onResume() 回调,用于恢复与 WebView 相关联的处理(在 onPause() 期间暂停)。
    • saveWebArchive() 可让您将当前视图在设备上另存为网页归档。
    • showFindDialog() 用于在当前视图中启动文本搜索。

浏览器

浏览器应用添加了以下功能来支持 Web 应用:

  • 媒体捕获

    HTML 媒体捕获规范中所定义,浏览器允许 Web 应用访问设备的音频、图片和视频捕获功能。例如,以下 HTML 为用户提供了捕获要上传的照片的输入:

    <input type="file" accept="image/*;capture=camera" />
    

    或者,通过排除 capture=camera 参数,用户可以选择使用相机拍摄新图片,或从设备(例如从图库应用中)选择一张图片。

  • 设备方向

    根据设备屏幕方向事件规范的定义,浏览器允许 Web 应用监听 DOM 事件,这些事件提供了与设备物理方向和动作相关的信息。

    设备方向由 x 轴、y 轴和 z 轴表示(以度为单位),而动作则用加速度和旋转速率数据表示。网页可以通过使用事件类型 "deviceorientation" 调用 window.addEventListener 来注册屏幕方向事件,并通过注册 "devicemotion" 事件类型来注册动作事件。

  • CSS 3D 转换

    CSS 3D 转换模块规范中所定义,浏览器允许在三维空间内转换由 CSS 渲染的元素。

JSON 实用程序

新类 JsonReaderJsonWriter 可帮助您读取和写入 JSON 流。新 API 补充了 org.json 类,此类类可操控内存中的文档。

您可以通过调用其构造函数方法并传递提供 JSON 字符串的 InputStreamReader 来创建 JsonReader 实例。然后,通过调用 beginObject() 开始读取对象,使用 nextName() 读取键名,使用与类型相关的方法(例如 nextString()nextInt())读取值,并在 hasNext() 为 true 时继续读取值。

您可以通过调用其构造函数并传递相应的 OutputStreamWriter 来创建 JsonWriter 的实例。然后,按照与读取器类似的方式编写 JSON 数据,使用 name() 添加属性名称,使用适当的 value() 方法添加相应的值。

默认情况下,这些类是严格的。每个类中的 setLenient() 方法都会对它们进行配置,使其在接受方面更自由。这种宽松解析模式还与 org.json 的默认解析器兼容。

新功能常量

<uses-feature> Manfest 元素应用于外部实体(例如 Google Play)应用所依赖的硬件和软件功能集。在此版本中,Android 添加了以下新常量,应用可使用此元素声明这些常量:

  • "android.hardware.faketouch"

    声明后,此状态表示应用与提供模拟触摸屏(或更高性能)的设备兼容。如果设备提供模拟触摸屏,则其会为用户提供可以模拟部分触摸屏功能的用户输入系统。例如,驱动屏幕光标的鼠标或遥控器就属于此类输入系统。此类输入系统支持基本触摸事件,如点击、向上点击和拖动。然而,在模拟触摸设备上,更复杂的输入类型(例如手势、快滑等)可能更加困难或不可能(绝对不可能实现多点触控手势)。

    如果您的应用不需要复杂的手势,并且您不希望从具有模拟触摸屏的设备中滤除您的应用,则应使用 <uses-feature> 元素声明 "android.hardware.faketouch"这样一来,您的应用将可供尽可能多的设备类型使用,包括只提供模拟触摸屏输入的设备类型。

    所有包含触摸屏的设备也都支持 "android.hardware.faketouch",因为触摸屏功能是模拟触摸功能的超集。因此,除非您确实需要触摸屏,否则应添加 <uses-feature> 元素以用于模拟触摸。

新权限

新平台技术

  • 存储空间
    • EXT4 文件系统支持,用于启用板载 eMMC 存储设备。
    • FUSE 文件系统,以支持 MTP 设备。
    • 支持 USB 主机模式,从而支持键盘和 USB 集线器。
    • 支持 MTP/PTP
  • Linux 内核
    • 已升级到 2.6.36
  • Dalvik 虚拟机
    • 用于支持并针对 SMP 进行优化的新代码
    • 对 JIT 基础架构进行了多项改进
    • 垃圾回收器改进:
      • 针对 SMP 进行了调优
      • 支持更大的堆大小
      • 统一处理位图和字节缓冲区
  • Dalvik 核心库
    • 更快速地实现 NIO(现代 I/O 库)
    • 改进了异常消息
    • 整个过程中的正确性和性能修复

“API 差异”报告

如需详细了解 Android 3.0(API 级别 11)中的所有 API 变更,请参阅 API 差异报告

API 级别

Android 3.0 平台提供了框架 API 的更新版本。系统会为 Android 3.0 API 分配一个整数标识符 11,该标识符存储在系统本身中。此标识符称为“API 级别”,可让系统在安装应用之前正确确定应用是否与系统兼容。

若要在您的应用中使用 Android 3.0 中引入的 API,您需要根据 Android 3.0 SDK 平台中提供的 Android 库编译应用。根据您的需求,您可能还需要在应用清单中向 <uses-sdk> 元素添加一个 android:minSdkVersion="11" 属性。如果您的应用设计为仅在 Android 2.3 及更高版本上运行,则声明该属性会阻止应用安装在较低版本的平台上。

如需了解详情,请参阅什么是 API 级别?