Android 2.0,第 1 版

API 级别5

从 2009 年 11 月起,Android 2.0 是一个可部署到 Android 手机的主要平台版本。此版本包含面向用户和开发者的新功能,以及对 Android 框架 API 的更改。

对于开发者来说,Android 2.0 平台可作为 Android SDK 的可下载组件提供。此可下载平台包含完全兼容的 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,支持来自多个帐号的数据
    • 利用新增的“快速联系人”框架 API,开发者可以在他们的应用中创建联系人标记。点击该标记会打开一个窗口,其中列出了一键联系人员的各种方式。

    WebView

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

    摄像头

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

    媒体

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

    其他框架

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

    在 key-up 时执行的关键事件

    Android 2.0 设计为在使用用于“主屏幕”“菜单”“返回”和“搜索”虚拟按键(而非实体按键)的设备上运行。为了在这些设备上提供最佳用户体验,Android 平台现在会在使用按键(而非按键)对时执行这些按钮。这有助于防止意外的按钮事件,并允许用户按下按钮区域,然后在不生成事件的情况下将其拖出。

    只有当您的应用拦截按钮事件并在按下按键时执行操作时,而不是按下按键时,这种行为变更才会影响您的应用。尤其是当应用拦截了“返回”键时,您应确保应用正确处理按键事件。

    一般来说,我们不建议拦截应用中的“返回”键,但如果您的应用这样做并在按下“按键”键(而不是“松开按键”)时调用了一些操作,那么您应该修改代码。

    如果您的应用将使用 Android 2.0(API 级别 5)中引入的 API,您可以利用新 API 来管理密钥-事件对:

    • 如果您要在 activity 或对话框中拦截“返回”键,只需实现新的 onBackPressed() 方法即可。
    • 如果您正在拦截视图中的 BACK 键,则应跟踪在按下按键时触发的按键事件(通过新的 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 及更低版本的平台中都能正常工作,您可以使用与上述方法类似的方法。您的代码可以在 key-down 时捕获目标按钮事件,设置一个跟踪按键事件的标志,然后在 key-up 时捕获该事件,并在设置了跟踪标志的情况下执行所需的操作。您还需要留意焦点变化,并在获得/失去焦点时清除跟踪标志。

    API 差异报告

    如需详细了解 Android 2.0(API 级别 5)与上一版本的对比情况,请参阅 API 差异报告