Android 2.3 API

API 级别9

对于开发者,Android 2.3 (GINGERBREAD)平台 可下载组件该可下载平台包括: Android 库和系统映像,以及一组模拟器皮肤和 。要开始针对 Android 2.3 进行开发或测试, 使用 Android SDK 管理器将该平台下载到您的 SDK 中。

API 概览

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

基于 SIP 的 VoIP

该平台现在包括一个 SIP 协议堆栈和框架 API, 开发者构建互联网电话应用借助此 API,应用无需管理会话、传输级通信或音频,即可提供语音通话功能,这些功能由平台的 SIP API 和服务透明地处理。

SIP API 可在 android.net.sip 软件包中使用。关键类是 SipManager, 设置和管理 SIP 配置文件,然后发起语音通话并接听 语音通话。建立语音通话后,应用便可将通话静音, 开启扬声器模式、发送 DTMF 音以及执行其他操作。应用也可以使用 SipManager,用于创建通用 SIP 连接。

平台的底层 SIP 堆栈和服务是否可在设备上使用,取决于制造商和关联的运营商。因此,应用应先使用 isApiSupported() 方法检查是否支持 SIP,然后再向用户公开通话功能。

要使用 SIP API,应用必须在以下日期之前向用户请求权限: 在其清单文件中声明 <uses-permission android:name="android.permission.INTERNET"><uses-permission android:name="android.permission.USE_SIP">

此外,开发者还可以在 Google Play 上请求过滤,以便其应用不会向设备未包含该平台 SIP 堆栈和服务的用户显示。如需请求过滤,请将 <uses-feature android:name="android.software.sip" android:required="true"><uses-feature android:name="android.software.sip.voip"> 添加到应用清单中。

如需了解详情,请参阅 SIP 开发者指南。

近距离无线通信 (NFC)

Android 2.3 包含一个 NFC 堆栈和框架 API, 读取在用户触摸支持 NFC 的设备时被发现的 NDEF 标签 来标记嵌入在贴纸、智能海报甚至其他设备中的元素。

该平台提供底层 NFC 服务,这些服务可与设备硬件配合使用,以便在标签进入范围时发现标签。发现代码后, 平台通过广播 Intent,将代码的 以 extra 形式发送到 intent 的 NDEF 消息。应用可以创建 intent 过滤器来识别和处理定位到的标记和消息。例如,通过 intent 接收标记后,应用会提取 NDEF 消息、将其存储、向用户发出提醒,或以其他方式处理这些消息。

NFC API 可在 android.nfc 软件包中找到。主要的类包括:

NFC 通信依赖于设备硬件中的无线技术, 特定设备上对平台 NFC 功能的支持取决于 其制造商。要确定当前设备是否支持 NFC, 应用可以调用 isEnabled() 查询 NfcAdapter。不过,无论底层硬件支持情况如何,NFC API 始终存在。

要使用 NFC API,应用必须通过 声明 <uses-permission android:name="android.permission.NFC">

此外,开发者还可以在 Google Play 上请求过滤,以便其应用不会向设备不支持 NFC 的用户显示。如需请求过滤,请将 <uses-feature android:name="android.hardware.nfc" android:required="true"> 添加到应用的清单中。

如需查看使用 NFC API 的示例应用,请参阅 NFCDemo

陀螺仪和其他传感器

Android 2.3 添加了对几种新传感器读取的平台和 API 支持 类型 - 陀螺仪、旋转矢量、线性加速度、重力和气压计。 开发者可以使用新的传感器读数来创建能够快速、顺畅地响应设备位置和动作精确变化的应用。Sensor API 会向感兴趣的应用报告陀螺仪和其他传感器变化,无论这些应用是在应用框架上还是在原生代码中运行。

请注意,任何给定设备上可用的特定硬件传感器集取决于设备制造商的决定。

开发者可以在 Google Play 上请求过滤,以便其应用不会向设备不提供陀螺仪传感器的用户显示。为此,请将 <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"> 添加到应用清单中。

如需了解 API 详情,请参阅 Sensor

支持多个摄像头

应用现在可以使用设备上可用的任何相机, 进行选择。借助 Camera,应用可以查询可用摄像头的数量以及每个摄像头的独特特性。

如需查看用于访问前置摄像头的示例代码,请参阅 ApiDemos 示例应用中的 CameraPreview.java

Camera API 还添加了以下内容:

可混音的音效

该平台的媒体框架增加了对新的按音轨或全局音频效果的支持, 包括低音增强、耳机虚拟化、均衡和混响。

如需查看音效的示例代码,请参阅 ApiDemos 示例应用中的 AudioFxDemo.java

媒体框架还添加了以下内容:

  • 新增了对 JPEG 文件 EXIF 元数据中的海拔标记的支持。新方法 getAltitude() 方法 检索 EXIF 海拔高度标签的值。
  • 新的 setOrientationHint() 方法可让应用在拍摄视频期间告知 MediaRecorder 方向。

下载管理器

该平台包含一个新的 DownloadManager 系统服务,用于处理长时间运行的 HTTP 下载。应用可以请求将 URI 下载到特定目标文件中。DownloadManager 将在后台进行下载,并处理 HTTP 交互 并在出现故障后或在连接发生变化和系统发生变更后重新尝试下载 重新启动。

  • 应用可以通过调用 getSystemService(String) 并传递 DOWNLOAD_SERVICE 来获取 DownloadManager 类的实例。发出请求的应用 通过此 API 下载内容应该为 ACTION_NOTIFICATION_CLICKED 注册广播接收器, 处理在用户点击通知中或 下载界面。
  • 借助 DownloadManager.Request 类,应用可以提供请求新下载所需的所有信息,例如请求 URI 和下载目的地。请求 URI 是唯一的 参数。请注意,默认的下载目标位置是共享卷,如果系统需要回收空间以供系统使用,则可能会删除您的文件。对于 永久性存储空间,可在外部 storage(请参阅 setDestinationUri(Uri))。
  • DownloadManager.Query 类提供了一些方法,可让应用查询和过滤正在进行的下载。

StrictMode

为了帮助开发者监控和提升应用的性能, 该平台提供了一个名为 StrictMode 的新系统工具。 在应用中实现后,StrictMode 会捕获并通知开发者可能降低应用性能的意外磁盘或网络活动,例如在应用的主线程(接收界面操作并播放动画)上进行的活动。开发者可以评估在 StrictMode 下出现的网络和磁盘使用问题 并根据需要进行更正,使主线程响应更快, 阻止向用户显示 ANR 对话框

  • StrictMode 是核心类,也是主要集成 与系统和虚拟机建立密切关系该类提供了一些便捷的方法来管理应用于实例的线程和虚拟机政策。
  • StrictMode.ThreadPolicyStrictMode.VmPolicy 用于存储您定义并应用于线程和虚拟机实例的政策。

详细了解如何使用 StrictMode 优化 请参阅 android.os.StrictMode 中的类文档和示例代码。

界面框架

  • 支持滚动
    • 新增了对 View 和 Widget 中滚动回弹的支持。在 View 中,应用可以为给定视图启用/停用滚动回弹,设置滚动回弹模式、控制滚动回弹距离,以及处理滚动回弹结果。
    • 在 widget 中,应用可以控制滚动特性,例如 动画、弹回和滚动距离如需了解详情,请参阅 android.view.Viewandroid.widget.OverScroller
    • ViewConfiguration 还提供了 getScaledOverflingDistance()getScaledOverscrollDistance() 方法。
    • 新的overScrollModeoverScrollFooter<ListView> 元素的 overScrollHeader 属性, 用于控制滚动行为
  • 支持触摸过滤
    • 新增了对触摸过滤的支持,让应用可以改进 提供敏感功能访问权限的 View 安全性。例如,触摸过滤功能适用于确保用户操作(例如授予权限请求、进行购买或点击广告)的安全性。有关详情,请参阅 View 类 文档
    • 为视图元素新增了 filterTouchesWhenObscured 属性,用于声明在视图的窗口被其他可见窗口遮挡时是否要滤除轻触。设置为 "true" 后,每当在视图窗口上方显示消息框、对话框或其他窗口时,视图都不会收到触摸事件。请参阅查看安全性 文档了解详情。

    如需查看触摸过滤的示例代码,请参阅 ApiDemos 示例应用中的 SecureView.java

  • 改进了事件管理
    • 新增了输入事件的基类 InputEvent。该类提供了一些方法,可让应用确定事件的含义,例如通过查询事件的来源 InputDevice。KeyEventMotionEventInputEvent
    • 为输入设备新增了基类 InputDevice。通过 类用于存储有关特定输入设备功能的信息, 提供的方法让应用程序确定如何解读来自 输入设备。
  • 改进的动作事件
    • MotionEvent API 已扩展为包含“指针 ID” 信息,这样应用便能跟踪每个手指的动作 上下移动该类添加了各种方法,可让应用高效地处理动作事件。
    • 输入系统现在具有逻辑,可使用新的 指针 ID 信息,在新的指针按下时合成标识符。通过 系统会在动作事件期间单独跟踪多个指针 ID 通过计算距离上的距离,确保指针的正确连续性 最后一组指针和下一组指针之间的变化。
  • 文本选择控件
    • 新的 setComposingRegion 方法可让应用标记 文本区域作为撰写文本,并保持当前样式不变。答 getSelectedText 方法可将选定的文本返回到 应用。这些方法在 BaseInputConnectionInputConnectionInputConnectionWrapper 中可用。
    • <TextView> 添加了新的 textSelectHandletextSelectHandleLefttextSelectHandleRighttextSelectHandleWindowStyle 属性,用于引用将用于显示文本选择锚点的可绘制对象以及包含窗口的样式。
  • 活动控件
  • 通知文本和图标样式
  • 超大屏幕

    该平台现在支持超大屏幕尺寸,例如平板电脑设备上可能采用的屏幕尺寸。开发者可以通过向清单文件添加 <supports screens ... android:xlargeScreens="true"> 元素,指明其应用旨在支持超大屏幕尺寸。应用可以使用新的资源限定符 xlarge 标记专门针对超大屏幕的资源。如需详细了解如何支持超大屏幕和其他屏幕尺寸,请参阅支持多种屏幕

    图形

    内容提供程序

    • 新增了用于设置闹钟或处理闹钟的 AlarmClock 提供程序类。提供程序包含 ACTION_SET_ALARM intent 操作和 extras 可用于启动 Activity,以便在 闹钟应用。希望接收 SET_ALARM Intent 应创建一个需要 SET_ALARM 权限。希望创建新的 闹钟应使用 Context.startActivity(),以便用户可以选择 要使用哪个闹钟应用
    • MediaStore 支持新的 intent 操作 PLAY_FROM_SEARCH,可让应用搜索音乐媒体,并尽可能自动播放搜索结果中的内容。例如, 应用可能会在收到语音识别命令时触发此 Intent 听音乐。
    • MediaStore 还添加了一个新的 MEDIA_IGNORE_FILENAME 标志,用于告知媒体 扫描程序忽略包含目录及其子目录中的媒体。 开发者可以使用此属性来避免图形显示在图库中,并同样防止应用音效和音乐显示在“音乐”应用中。
    • Settings 提供程序添加了新的 activity 操作 APPLICATION_DETAILS_SETTINGSMANAGE_ALL_APPLICATIONS_SETTINGS,可让应用显示详细信息 屏幕,或显示“管理应用程序”屏幕。
    • ContactsContract 提供程序会添加 ContactsContract.CommonDataKinds.SipAddress 数据类型,用于存储联系人的 SIP(互联网电话)地址。

    位置信息

    • LocationManager现在会跟踪应用 请求触发唤醒锁定或 Wi-Fi 锁定,具体取决于 WorkSource:一个由系统管理的类,用于标识 应用。

      LocationManager 会跟踪请求定期更新的所有客户端,并在设置其最短更新时间时,将这些客户端作为 WorkSource 参数告知其提供方。网络位置信息提供程序使用 WorkSource 跟踪应用发起的唤醒和 Wi-Fi 锁定,并将其添加到“管理应用”中报告的应用电池用量中。

    • LocationManager 添加了几个新方法, 让 Activity 注册以接收定期或一次性位置信息更新, (见下文)。
    • 新的 Criteria 类可让应用指定 用于选择位置信息提供程序的一组条件。例如,提供商可能是 排序依据为精确度、能耗、海拔高度、速度、 以及资金成本。

    存储

    • Android 2.3 添加了一个新的 StorageManager, 支持 OBB(不透明二进制 Blob)文件。虽然 Android 2.3 中提供了对 OBB 的平台支持,但用于创建和管理 OBB 文件的开发工具要到 2011 年初才会推出。
    • Android 2.3 平台为不包含 SD 卡的设备添加了官方支持(不过,当没有实体 SD 卡可用时,它会提供虚拟 SD 卡分区)。isExternalStorageRemovable() 是一种便捷方法,可让应用 确定是否存在物理 SD 卡。

    文件包管理器

    • 新增了用于声明硬件和软件功能的新常量。请参阅下文中的新功能常量部分中的列表。
    • PackageInfo 添加了新的 firstInstallTimelastUpdateTime 字段,用于存储 软件包安装和上次更新时间。
    • 新增了 getProviderInfo() 方法,用于检索关于以下主题的所有已知信息: 特定 content provider 类。

    电话

    拥有对 activity 生命周期、窗口的原生访问权限

    Android 2.3 向使用原生代码的应用公开了一系列 API。对此类应用感兴趣的框架类包括:

    • NativeActivity 是一种新型的 activity 类, 生命周期回调直接在原生代码中实现。答 NativeActivity 及其底层原生代码在系统中运行 就像其他 activity 一样,具体而言,它们在 Android 应用的系统进程,并在应用的主界面线程上执行, 并且它们会收到与其他 activity 相同的生命周期回调。
    • 借助新的 InputQueue 类和回调接口,原生代码可以管理事件队列。
    • 借助新的 SurfaceHolder.Callback2 接口,原生代码可以管理 SurfaceHolder
    • Window 中新增了 takeInputQueuetakeSurface() 方法,让原生代码可以管理事件和 Surface。

    如需详细了解如何使用原生代码或下载 NDK,请参阅 Android NDK 页面。

    Dalvik 运行时

    新的清单元素和属性

    • <supports-screens> 新增了 xlargeScreens 属性 元素来指示应用是否支持 超大屏幕设备类型。有关详情,请参阅支持多个 屏幕
    • <activity> 元素的 android:screenOrientation 属性的新值:
      • "reverseLandscape" - activity 希望将屏幕设为横向,并与正常横向方向相反。
      • "reversePortrait" - activity 希望将屏幕设为纵向,并与正常纵向方向相反。
      • "sensorLandscape" - activity 希望将屏幕设为横向,但可以使用传感器更改屏幕朝向。
      • "sensorPortrait" - activity 希望屏幕处于纵向模式,但可以使用传感器更改屏幕朝向。
      • "fullSensor" - 屏幕方向由物理方向传感器决定:显示屏会随用户移动设备的方向而旋转。这允许 4 种可能的旋转中的任意一种,无论 (例如,某些设备通常不使用 180 度全景) 轮播)。

    新权限

    • com.android.permission.SET_ALARM - 允许应用 来广播一个 Intent 来为用户设置闹钟。处理 SET_ALARM intent 操作的 activity 应需要此权限。
    • android.permission.USE_SIP - 允许应用使用 SIP API 拨打或接听互联网通话。
    • android.permission.NFC - 允许应用使用 NFC API 读取 NFC 标签。

    新地图项常量

    该平台添加了几项新的硬件功能,开发者可以声明这些功能 在其应用清单中声明为应用需要。这个 让开发者可以控制其应用在 Google Play。

    如需详细了解如何声明功能并将其用于过滤,请参阅 <uses-feature> 的文档。

    API 差异报告

    如需详细了解 Android 2.3(API 级别 9),请参阅 API 差异报告

    API 级别

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

    要在您的应用中使用 Android 2.3 中引入的 API,请执行以下操作: 您需要根据此 API 中提供的 Android 库 Android 2.3 SDK 平台。根据您的需求,您可能还需要向应用清单中的 <uses-sdk> 元素添加 android:minSdkVersion="9" 属性。如果您的应用仅设计为在 Android 2.3 及更高版本上运行,则声明此属性可防止应用安装在较低版本的平台上。

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