API 级别:5
Android 2.0 是一个主要平台版本,从 2009 年 11 月开始可部署到搭载 Android 的手机。此版本包含面向用户和开发者的新功能,以及 Android 框架 API 中的变更。
对于开发者,Android 2.0 平台可作为 Android SDK 的可下载组件提供。该可下载平台包括一个完全合规的 Android 库和系统映像,以及一组模拟器皮肤、示例应用等等。可下载的平台完全符合相关要求,且不包含任何外部库。
如需开始针对 Android 2.0 平台进行开发或测试,请使用 Android SDK 和 AVD 管理器工具将该平台下载到您的 SDK 中。
平台亮点
如需查看新用户功能和平台亮点的列表,请参阅 Android 2.0 平台亮点文档。
内置应用
可下载平台中包含的系统映像提供以下内置应用:
|
|
语言区域
可下载平台中包含的系统映像提供多种内置语言区域。在某些情况下,特定区域的语言区域提供特定区域的字符串。而在其他情况下,系统会使用该语言的默认版本。下面列出了 Android 2.0 系统映像中提供的语言(包含 language_country/region 语言区域描述符)。
|
|
本地化的界面字符串与可通过“设置”访问的语言区域匹配。
模拟器皮肤
可下载的平台包含一组模拟器皮肤,可用于在不同屏幕尺寸和分辨率下对应用进行建模。模拟器皮肤如下:
- QVGA(240x320、低密度、小屏幕)
- WQVGA(240x400、低密度、普通屏幕)
- FWQVGA(240x432、低密度、标准屏幕)
- HVGA(320x480、中密度、标准屏幕)
- WVGA800(480x800,高密度,标准屏幕)
- WVGA854(480x854 高密度,标准屏幕)
如需详细了解如何开发可在所有 Android 设备上正常显示和运行的应用,请参阅支持多种屏幕。
开发者功能
以下各部分介绍了可下载的 Android 2.0 平台组件所提供的新开发者功能。
Ant 支持
- 调试和发布模式应用签名。发布模式签名包含对
zipalign
优化的集成支持。如需了解详情,请参阅为应用签名。 - 添加了新的 Ant 构建系统,支持 Emma 插桩项目(代码覆盖率)。
Framework API
以下部分介绍了 Android 2.0 平台提供的应用框架 API。
API 级别
Android 2.0 平台提供更新后的框架 API 版本。与以前的版本一样,系统会为 Android 2.0 API 分配一个整数标识符 (5),该标识符存储在系统本身中。此标识符称为“API 级别”,可让系统在安装应用之前正确确定应用是否与系统兼容。
如需在应用中使用 Android 2.0 中引入的 API,您需要在应用清单的 <uses-sdk>
元素的属性中设置适当的值“5”。
如需详细了解如何使用 API 级别,请参阅 API 级别文档。
API 变更摘要
蓝牙
- 开启/关闭蓝牙
- 设备和服务发现
- 使用 RFCOMM 连接到远程设备并发送/接收数据
- 广告 RFCOMM 服务并监听传入的 RFCOMM 连接
同步适配器
- 新增了适用于同步适配器的 API,以连接到任何后端
客户经理
- 集中式账号管理器 API,可安全地存储和访问身份验证令牌/密码
通讯录
- 支持从多个账号获取数据的新联系人 API
- 借助新的快捷联系框架 API,开发者可以在其应用中创建联系人标记。点击该标记会打开一个窗口,其中列出了可一键与对方联系的方式。
WebView
- 已废弃的类:UrlInterceptHandler、Plugin、PluginData、PluginList、UrlInterceptRegistry。
相机
- 新增了色彩效果、取景模式、闪光灯模式、对焦模式、白平衡、旋转和其他设置的参数。
- 新增了 ZoomCallback 接口,用于在缩放级别发生变化时执行操作。
媒体
- 现在,在将图片插入 MediaStore 时,MediaScanner 会为所有图片生成缩略图。
- 新增了 Thumbnail API,用于按需检索图片和视频缩略图。
其他框架
- android.R.style 中新增了系统主题,可轻松在当前系统壁纸上显示 activity,或让上一个 activity 在后台保持可见。
- 新的 WallpaperManager API 取代并扩展了之前在 Context 中的壁纸 API,以允许应用请求和设置系统壁纸。
- 新增了服务 API,以帮助应用正确处理服务生命周期,尤其是在内存不足的情况中,此类情况可能会导致服务在运行时被终止。
- Service.setForeground() 已废弃,现在实际上不执行任何操作。它已被新 API startForeground() 取代,该 API 有助于(并且要求)将持续性通知与前台状态相关联。
- MotionEvent 现在可以为支持它的设备报告同时触摸信息。最多可以同时跟踪 3 个指针。
- KeyEvent 提供了新的按键调度 API,以帮助实现按键释放操作和长按行为,以及用于取消按键按下操作(适用于虚拟按键)的新机制。
- WindowManager.LayoutParams 新增了一些常量,可让窗口在显示时唤醒屏幕,即使屏幕处于锁定状态也能显示窗口。这样,应用就可以更轻松地实现闹钟等应唤醒设备的功能。
- 新增了 intent API,用于广播设备的插接状态,并可让应用在设备放入桌面基座或车载基座时启动特殊 activity。
按键时执行按键事件
Android 2.0 专为在使用虚拟按键(而非实体按键)来实现“主屏幕”“菜单”“返回”和“搜索”的设备上运行而设计。为了在这些设备上提供最佳用户体验,Android 平台现在会在按下按键时执行这些按钮,以便实现 key-down/key-up 对(而不是按下按键)。这有助于防止意外的按钮事件,并可让用户按下按钮区域,然后将其拖出,而不会生成事件。
只有当您的应用拦截按钮事件并在按下键(而非按下键)时执行操作时,这种行为变更才会影响您的应用。尤其是当应用拦截返回键时,您应确保应用正确处理按键事件。
一般来说,我们不建议在应用中拦截 BACK 键,但如果您的应用这样做,它会在按下 keydown(而非 keyup)时调用一些操作,您应修改自己的代码。
如果您的应用将使用 Android 2.0(API 级别 5)中引入的 API,那么您可以利用新的 API 来管理键-事件对:
- 如果您在 activity 或对话框中拦截返回键,只需实现新的
onBackPressed()
方法即可。 - 如果您在某个视图中拦截返回键,应在按下按键时跟踪按键事件(通过新的
startTracking()
方法),然后在按下按键时调用该操作。您可以使用以下模式:
Kotlin
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean { return when (keyCode) { KeyEvent.KEYCODE_BACK -> { if (event.repeatCount == 0) { event.startTracking() true } else { false } } ... else -> super.onKeyDown(keyCode, event) } } override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when (keyCode) { KeyEvent.KEYCODE_BACK -> { if (event.isTracking && !event.isCanceled) { // *** DO ACTION HERE *** true } else { false } } ... else -> super.onKeyUp(keyCode, event) } }
Java
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { event.startTracking(); return true; } return super.onKeyDown(keyCode, event); } public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled()) { // *** DO ACTION HERE *** return true; } return super.onKeyUp(keyCode, event); }
如果您想更新旧版应用,使其对返回键的处理在 Android 2.0 及更低平台版本中正常运行,可以使用与上文中所述方法类似的方法。您的代码可以在按下按键时捕获目标按钮事件,设置一个标记来跟踪按键事件,然后在按键时捕获该事件,如果设置了跟踪标记,则执行所需的操作。您还需要监控焦点变化,并在获得/失去焦点时清除跟踪标志。
API 差异报告
如需详细了解 Android 2.0(API 级别 5)中的 API 变更(与先前版本相比),请参阅 API 差异报告。