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
软件包中找到。主要的类包括:
NfcAdapter
,表示设备上的 NFC 硬件。NdefMessage
:表示 NDEF 数据消息。 “记录”在计算机之间传输数据的 设备和代码应用可以从ACTION_TAG_DISCOVERED
intent 接收这些消息。NdefRecord
,采用NdefMessage
:用于说明要共享的数据类型 传输数据本身
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
,应用可以查询可用摄像头的数量以及每个摄像头的独特特性。
- 新的
Camera.CameraInfo
类会存储相机的 位置特征(方向、前置或后置)。 - 借助
Camera
类中的新getNumberOfCameras()
和getCameraInfo()
方法,应用可以查询可用的摄像头 并打开所需的摄像头。 - 新的
get()
方法允许 应用会检索特定相机的CamcorderProfile
。 - 新的
getJpegEncodingQualityParameter()
允许应用获取静态图片 特定相机的拍摄质量级别。
如需查看用于访问前置摄像头的示例代码,请参阅 ApiDemos 示例应用中的 CameraPreview.java。
Camera API 还添加了以下内容:
- 相机的新参数,包括焦距、对焦模式和预览帧速率最大值/最小值。新增了用于获取相机参数的
getFocusDistances()
、getPreviewFpsRange()
和getSupportedPreviewFpsRange()
,以及用于设置预览帧速率的setPreviewFpsRange()
。
可混音的音效
该平台的媒体框架增加了对新的按音轨或全局音频效果的支持, 包括低音增强、耳机虚拟化、均衡和混响。
- 新的
android.media.audiofx
软件包提供了 用于访问音效的 API。 - 新的
AudioEffect
是基类 用于控制 Android 音频框架提供的音频效果。 - 新的音频会话 ID,可让应用将一组音频效果与
AudioTrack
或MediaPlayer
的实例相关联。 - 新的
AudioTrack
类构造函数,可让您创建具有特定会话 ID 的AudioTrack
。新的attachAuxEffect()
、getAudioSessionId()
和setAuxEffectSendLevel()
方法。 - 新的
attachAuxEffect()
、getAudioSessionId()
、setAudioSessionId(int)
和setAuxEffectSendLevel()
方法以及支持的类型。
如需查看音效的示例代码,请参阅 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.ThreadPolicy
和StrictMode.VmPolicy
用于存储您定义并应用于线程和虚拟机实例的政策。
详细了解如何使用 StrictMode 优化
请参阅 android.os.StrictMode
中的类文档和示例代码。
界面框架
- 支持滚动
- 新增了对 View 和 Widget 中滚动回弹的支持。在 View 中,应用可以为给定视图启用/停用滚动回弹,设置滚动回弹模式、控制滚动回弹距离,以及处理滚动回弹结果。
- 在 widget 中,应用可以控制滚动特性,例如
动画、弹回和滚动距离如需了解详情,请参阅
android.view.View
和android.widget.OverScroller
。 ViewConfiguration
还提供了getScaledOverflingDistance()
和getScaledOverscrollDistance()
方法。- 新的
overScrollMode
、overScrollFooter
和<ListView>
元素的overScrollHeader
属性, 用于控制滚动行为
- 支持触摸过滤
- 新增了对触摸过滤的支持,让应用可以改进 提供敏感功能访问权限的 View 安全性。例如,触摸过滤功能适用于确保用户操作(例如授予权限请求、进行购买或点击广告)的安全性。有关详情,请参阅 View 类 文档。
- 为视图元素新增了
filterTouchesWhenObscured
属性,用于声明在视图的窗口被其他可见窗口遮挡时是否要滤除轻触。设置为"true"
后,每当在视图窗口上方显示消息框、对话框或其他窗口时,视图都不会收到触摸事件。请参阅查看安全性 文档了解详情。
如需查看触摸过滤的示例代码,请参阅 ApiDemos 示例应用中的 SecureView.java。
- 改进了事件管理
- 新增了输入事件的基类
InputEvent
。该类提供了一些方法,可让应用确定事件的含义,例如通过查询事件的来源 InputDevice。KeyEvent
和MotionEvent
是InputEvent
。 - 为输入设备新增了基类
InputDevice
。通过 类用于存储有关特定输入设备功能的信息, 提供的方法让应用程序确定如何解读来自 输入设备。
- 新增了输入事件的基类
- 改进的动作事件
MotionEvent
API 已扩展为包含“指针 ID” 信息,这样应用便能跟踪每个手指的动作 上下移动该类添加了各种方法,可让应用高效地处理动作事件。- 输入系统现在具有逻辑,可使用新的 指针 ID 信息,在新的指针按下时合成标识符。通过 系统会在动作事件期间单独跟踪多个指针 ID 通过计算距离上的距离,确保指针的正确连续性 最后一组指针和下一组指针之间的变化。
- 文本选择控件
- 新的
setComposingRegion
方法可让应用标记 文本区域作为撰写文本,并保持当前样式不变。答getSelectedText
方法可将选定的文本返回到 应用。这些方法在BaseInputConnection
、InputConnection
和InputConnectionWrapper
中可用。 - 为
<TextView>
添加了新的textSelectHandle
、textSelectHandleLeft
、textSelectHandleRight
和textSelectHandleWindowStyle
属性,用于引用将用于显示文本选择锚点的可绘制对象以及包含窗口的样式。
- 新的
- 活动控件
ActivityInfo
添加了用于管理 activity 屏幕方向:SCREEN_ORIENTATION_FULL_SENSOR
,SCREEN_ORIENTATION_REVERSE_LANDSCAPE
,SCREEN_ORIENTATION_REVERSE_PORTRAIT
,SCREEN_ORIENTATION_SENSOR_LANDSCAPE
, 和SCREEN_ORIENTATION_SENSOR_PORTRAIT
。- 为
ActivityManager.RunningAppProcessInfo
中的importance
字段添加了新的常量IMPORTANCE_PERCEPTIBLE
。此值表示特定进程正在运行被视为对用户可感知的操作。一个例子是 背景音乐播放。 - 用于标记 作为持久性 activity 现已废弃,并且该实现为空操作。
- 通知文本和图标样式
- 添加剩余的 OpenGL ES 2.0 方法
glDrawElements()
和android.opengl.GLES20
类中的glVertexAttribPointer()
。 - 添加了对
YV12
像素格式的支持,这是一种平面 4:2:0 YCrCb 格式。 - 新增了用于设置闹钟或处理闹钟的
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_SETTINGS
和MANAGE_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
添加了新的firstInstallTime
和lastUpdateTime
字段,用于存储 软件包安装和上次更新时间。- 新增了
getProviderInfo()
方法,用于检索关于以下主题的所有已知信息: 特定 content provider 类。 TelephonyManager
添加了常量NETWORK_TYPE_EVDO_B
,用于指定 CDMA EVDO Rev B 网络类型。- 新的
getPsc()
方法会返回 UMTS 网络上主服务小区的主扰码。 NativeActivity
是一种新型的 activity 类, 生命周期回调直接在原生代码中实现。答NativeActivity
及其底层原生代码在系统中运行 就像其他 activity 一样,具体而言,它们在 Android 应用的系统进程,并在应用的主界面线程上执行, 并且它们会收到与其他 activity 相同的生命周期回调。- 借助新的
InputQueue
类和回调接口,原生代码可以管理事件队列。 - 借助新的
SurfaceHolder.Callback2
接口,原生代码可以管理SurfaceHolder
。 Window
中新增了takeInputQueue
和takeSurface()
方法,让原生代码可以管理事件和 Surface。dalvik.system
移除了之前弃用的多个类。- Dalvik 核心库:
- 新集合:
ArrayDeque
、NavigableMap
、ConcurrentSkipListMap
,LinkedBlockingDeque
- 新的
Arrays
实用程序:binarySearch()
、copyOf()
、copyOfRange()
等。 - 针对
HttpURLConnection
的CookieManager
。 - 更完整的网络 API:
InterfaceAddress
、NetworkInterface
和IDN
File
读写控件String.isEmpty()
Normalizer
和Normalizer.Form
- 改进了
javax.net.ssl
服务器套接字。
- 新集合:
- 为
<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 标签。android.hardware.audio.low_latency
- 应用在设备上使用低延迟时间音频管道,并且对声音输入或输出的延迟或滞后非常敏感。android.hardware.camera.front
- 应用使用设备上的前置摄像头。android.hardware.nfc
- 应用使用设备中的 NFC 无线功能。android.hardware.sensor.barometer
- 应用使用设备的气压计。android.hardware.sensor.gyroscope
- 应用使用设备的 陀螺仪传感器。android.software.sip
— 应用使用设备上的 SIP API。android.software.sip.voip
- 应用在设备上使用基于 SIP 的 VoIP 服务。android.hardware.touchscreen.multitouch.jazzhand
- 应用使用设备屏幕上的高级多点多触摸功能,完全独立地跟踪五点或更多点的轨迹。
超大屏幕
该平台现在支持超大屏幕尺寸,例如平板电脑设备上可能采用的屏幕尺寸。开发者可以通过向清单文件添加 <supports
screens ... android:xlargeScreens="true">
元素,指明其应用旨在支持超大屏幕尺寸。应用可以使用新的资源限定符 xlarge
标记专门针对超大屏幕的资源。如需详细了解如何支持超大屏幕和其他屏幕尺寸,请参阅支持多种屏幕。
图形
内容提供程序
位置信息
存储
文件包管理器
电话
拥有对 activity 生命周期、窗口的原生访问权限
Android 2.3 向使用原生代码的应用公开了一系列 API。对此类应用感兴趣的框架类包括:
如需详细了解如何使用原生代码或下载 NDK,请参阅 Android NDK 页面。
Dalvik 运行时
新的清单元素和属性
新权限
新地图项常量
该平台添加了几项新的硬件功能,开发者可以声明这些功能 在其应用清单中声明为应用需要。这个 让开发者可以控制其应用在 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 级别?