Android 2.0,第 1 版

API 级别5

Android 2.0 是一个主要平台版本 可于 2009 年 11 月开始部署到采用 Android 的手机。 此版本包含面向用户和开发者的新功能 Android 框架 API 中的 API。

对于开发者,Android 2.0 平台以 可下载组件可下载平台包含 完全兼容的 Android 库和系统映像,以及一组模拟器 皮肤、示例应用等等。可下载平台 并且不包含任何外部库。

要开始针对 Android 2.0 平台,请使用 Android SDK 和 AVD 管理器工具 将该平台下载到您的 SDK 中。

平台亮点

有关新用户功能和平台亮点的列表,请参阅 Android 2.0 平台亮点文档。

内置应用

可下载平台中包含的系统映像提供了这些 内置应用:

  • 闹钟
  • 浏览器
  • 计算器
  • 摄像机
  • 相机
  • 通讯录
  • 自定义语言区域(开发者应用)
  • 开发者工具(开发者应用)
  • 拨号器
  • 电子邮件
  • 图库
  • 手势构建器
  • 用于日语文本输入的 IME
  • 消息功能
  • 音乐
  • 设置
  • 备件(开发者应用程序)

语言区域

可下载平台中包含的系统映像提供了各种 内置语言区域。在某些情况下,特定于区域的字符串可用于 语言区域。而在其他情况下,系统会使用该语言的默认版本。通过 Android 2.0 系统支持的语言 图片如下(采用 language_country/region 语言区域) 描述符)。

  • 中国中文 (zh_CN)
  • 中文、台湾 (zh_TW)
  • 捷克语 (cs_CZ)
  • 荷兰语、荷兰 (nl_NL)
  • 荷兰语、比利时 (nl_BE)
  • 英语、美国 (en_US)
  • 英语、英国 (en_GB)
  • 英语、加拿大 (en_CA)
  • 英语、澳大利亚 (en_AU)
  • 英语、新西兰 (en_NZ)
  • 英语(新加坡)(en_SG)
  • 法语、法国 (fr_FR)
  • 法语(比利时)(fr_BE)
  • 法语(加拿大)(fr_CA)
  • 法语(瑞士)(fr_CH)
  • 德语(德国)(de_DE)
  • 德语、奥地利 (de_AT)
  • 德语(瑞士)(de_CH)
  • 德语(列支敦士登)(de_LI)
  • 意大利意大利语 (it_IT)
  • 意大利语、瑞士 (it_CH)
  • 日语 (ja_JP)
  • 韩语 (ko_KR)
  • 波兰语 (pl_PL)
  • 俄语 (ru_RU)
  • 西班牙语 (es_ES)
  • 本地化的界面字符串与可访问的语言区域相匹配 通过“设置”进行设置

    模拟器皮肤

    可下载平台包含一组模拟器皮肤,您可以使用这些皮肤针对不同的屏幕尺寸和分辨率对应用进行建模。模拟器皮肤为:

    • 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,允许来自多个账号的数据
    • 新的 Quick Contact 框架 API 使开发者能够在其应用程序中创建联系人徽章。点击该徽章会打开一个窗口,其中列出了与此人的联系方法列表。

    WebView

    • 已弃用的类:UrlInterceptHandler、Plugin、PluginData、PluginList、UrlInterceptRegistry。

    相机

    • 新增了色彩效果、取景模式、闪光灯模式、对焦模式、白平衡、旋转和其他设置的参数。
    • 新增 ZoomCallback 接口,可在缩放级别发生变化时执行操作。

    媒体

    • 现在,在将图片插入 MediaStore 时,MediaScanner 会为所有图片生成缩略图。
    • 新增了用于按需检索图片和视频缩略图的 缩略图 API。

    其他框架

    • android.R.style 中新增了系统主题,可轻松在当前系统壁纸之上显示 activity,或使之前的 activity 在后台保持可见。
    • 新的 WallpaperManager API 取代并扩展了以前在 Context 中的壁纸 API,以允许应用请求和设置系统壁纸。
    • 新增了服务 API,以帮助应用正确处理服务生命周期,尤其是在内存不足的情况中,此类情况可能会导致服务在运行时被终止。
      • Service.setForeground() 已废弃,现在实际上不执行任何操作。该 API 已替换为新的 API startForeground(),该 API 有助于(且需要)将持续性通知与前台状态相关联。
    • 对于支持 MotionEvent 的设备,现在可以报告同时触摸信息。最多可同时跟踪三个指针。
    • KeyEvent 具有新的按键调度 API,可帮助实现操作开启和长按行为,以及取消按键操作的新机制(针对虚拟按键)。
    • WindowManager.LayoutParams 具有新常量,这些常量可让窗口在显示时唤醒屏幕,并在屏幕处于锁定状态时显示窗口。这样一来,应用可以更清晰地实现应唤醒设备的闹钟等内容。
    • 新增了 intent API,用于广播设备的插接状态,并可让应用在设备放入桌面基座或车载基座时启动特殊 activity。

    在按键时执行按键事件

    Android 2.0 设计为可在使用虚拟按键(代表主屏幕)的设备上运行。 菜单、“返回”和“搜索”键,而不是实体键。为最佳用户提供支持 时,Android 平台现在会在 key-up,用于 key-down/key-up 对,而不是 key-down。这有助于防止 意外按钮事件,允许用户按下按钮区域,然后拖动 不用生成任何事件

    此行为变更只会对您的应用造成影响, 拦截按钮事件并在按下按键时(而不是在按下时)执行操作 键。尤其是如果您的应用拦截的是返回键,您应该 请确保您的应用正确处理关键事件。

    一般情况下,建议不要在应用中拦截返回键, 但是,如果您的应用正在执行该操作,它会对 您应修改代码

    如果您的应用将使用 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);
          }
      

    如果您想要更新旧版应用,以使其对 BACK 的处理 密钥在 Android 2.0 及更早的平台上都有效, 可以使用与上述方法类似的方法。您的代码可以捕获 按下 key-down 时定位按钮事件,设置一个标记来跟踪键事件,以及 然后在按键时捕获事件,如果跟踪到 标志已设置。您还需要留意焦点变化并清除跟踪信息 标记。

    API 差异报告

    如需详细了解 Android 2.0(API 级别 5)中 API 与 请参阅 API 差异报告