Android 2.0,第 1 版

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 平台亮点文档。

内置应用

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

  • 闹钟
  • 浏览器
  • 计算器
  • 摄像机
  • 相机
  • 通讯录
  • 自定义语言区域(开发者应用)
  • 开发者工具(开发者应用)
  • 拨号器
  • 电子邮件地址
  • 图库
  • 手势构建器
  • 适用于日语文本输入的 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 优化的集成支持。如需了解详情,请参阅为应用签名
    • 添加了支持 Emma 插桩项目(代码覆盖率)的新 Ant 构建系统。

    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 startForeground(),它有助于(并且需要)将持续性通知与前台状态相关联。
    • MotionEvent 现在可以针对支持同时触摸的设备报告同步触摸信息。最多可同时跟踪三个指针。
    • KeyEvent 具有新的按键调度 API(有助于实现操作启动和长按行为)以及用于取消按键的新机制(适用于虚拟按键)。
    • WindowManager.LayoutParams 具有新的常量,这些常量允许窗口在屏幕显示时唤醒屏幕,并在屏幕处于锁定状态时显示该窗口。这使应用能够更明晰地实现闹钟等会唤醒设备的功能。
    • 新增了 Intent API,用于广播设备的插接状态,并允许应用在设备插入桌面基座或车载基座时启动特殊 Activity。

    在按键时执行按键事件

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

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

    一般来说,我们不建议在应用中拦截 BACK 键,但是,如果您的应用会拦截 BACK 键,并且在进行 key-down 时(而非 key-up 时)调用一些操作,您应该修改代码。

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

    • 如果您要在 activity 或对话框中拦截 BACK 键,只需实现新的 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 变更,请参阅 API 差异报告