1



Similar documents
Microsoft Word zw

Microsoft Word - 第1章 Android基本概念.docx

2 第 章 绪 论 Internet 2.0 使 得 消 费 型 电 子 产 品 用 户 可 以 通 过 多 种 不 同 的 数 据 网 络 访 问 互 联 网 内 容 用 户 可 以 使 用 便 携 式 消 费 型 电 子 设 备, 如 智 能 手 机 触 屏 平 板 电 脑 电 子 书, 甚 至

Android Robert C.C. Huang Oscar F.Y. Liu Peter C.L. Hsieh 2011/03/21

<4D F736F F D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63>

APP 103 學 年 度 嶺 東 科 技 大 學 資 訊 網 路 系 專 題 研 究 報 告 嶺 東 中 華 民 國 一 四 年 五 月 1

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明

Microsoft Word 手冊.doc

ESET Mobile Security for Android

第 1 章.indd

PRIV-5.1-User Guide

ESET Mobile Security for Android

ONTENTS 目 次 AUGUST 热 讯 早 点 03 我 思 我 想 我 不 是 配 角 05 中 兴 手 机 配 件 面 面 观 浅 谈 手 机 UI 的 人 文 设 计 07 智 能 家 庭 09 手 机

【策略行銷分析】宏達電

111

Cisco WebEx Meetings Server 2.6 版常见问题解答

Contents Contents: Part 1 7 GALAXY Tab P P P.08 Part 2 1

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南

AndroidUsersGuide.book


Seagate_Dashboard_UG.book

Adobe AIR 安全性

产品手册

User Guide

声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 任 何 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和 主 管 会 计 工

目 录 简 介.3 ` 体 系 结 构...4 数 据 层...5 数 据 连 接 器...6 Tableau Server 组 件...7 网 关 / 负 载 平 衡 器...8 客 户 端 :Web 浏 览 器 和 移 动 应 用 程 序...8 客 户 端 :Tableau Desktop..

HTC One E9+

本手册描述了Piu和Piu Player的功能,及Piu的完整使用流程。

学 院 人 才 培 养 分 项 自 评 报 告 结 果 汇 总 表 主 要 评 估 指 标 关 键 评 估 要 素 自 评 等 级 1.1 学 校 事 业 发 展 规 划 合 格 1. 领 导 作 用 1.2 办 学 目 标 与 定 位 合 格 1.3 对 人 才 培 养 重 视 程 度 合 格 1

2

实 际 上,2012 年 以 来, 移 动 互 联 网 领 域 的 热 潮 已 经 有 所 回 落 从 产 品 创 新 社 区 极 客 公 园 的 跟 踪 数 据 来 看,2012 年 上 半 年 移 动 互 联 网 的 新 生 应 用 数 量 比 去 年 下 滑 了 30% 以 上, 结 合 投

Android Android Android SDK iv

Microsoft Word - MCTalk Phone2

CH01.indd

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之


申 请 者 的 承 诺 : 我 承 诺 对 本 人 填 写 的 各 项 内 容 的 真 实 性 负 责, 保 证 没 有 知 识 产 权 争 议 如 获 准 立 项, 本 表 为 有 约 束 力 的 协 议, 遵 守 广 东 省 教 育 科 学 规 划 领 导 小 组 办 公 室 的 有 关 规 定

Flipout

中南大学第二届软件创新大赛

按 系 统 提 示 完 成 安 装 并 生 成 交 易 图 标, 双 击 图 标 即 可 运 行 中 原 证 券 至 尊 版 交 易 系 统


GoFlex Home UG Book.book

Mocat

pcdashboard.book

BlackBerry Classic Smartphone-用户指南

校友会系统白皮书feb_08

版 權 2014 贊 雲 科 技 股 份 有 限 公 司 版 權 保 護 聲 明 未 經 贊 雲 科 技 股 份 有 限 公 司 書 面 許 可, 本 檔 任 何 部 分 的 內 容 不 得 被 複 製 或 抄 襲 用 於 任 何 目 的 本 檔 的 內 容 在 未 經 通 知 的 情 形 下 可

indows CE 1996 Semiconductor Industry Association (SIA) Windows CE Windows Embedded CE 6.0 Windows CE Windows Embedded CE 6.0 Micr

ebook140-9

等 特 定 服 务 换 句 话 说, 设 备 的 可 能 用 途 取 决 于 在 用 户 购 买 它 时 预 先 安 装 的 应 用 程 序 这 在 新 移 动 设 备 中 发 生 了 巨 大 变 化, 新 移 动 设 备 几 乎 是 各 种 使 用 模 型 的 一 个 入 口 所 有 参 与 方,

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

epub83-1

翻 墙 问 答 享 受 互 联 网 所 带 来 的 便 利, 以 及 私 隐 保 障, 本 来 就 如 其 他 许 多 天 赋 权 利, 这 已 是 一 个 人 应 该 享 有, 无 分 国 界 和 种 族 很 不 幸, 在 中 国 引 入 互 联 网 不 久, 中 国 就 滥 用 很 多 本 来

目次 

宁夏专业技术人员服务平台

Wireless Plus.book

audiogram3 Owners Manual



麻 省 理 工 學 院 是 在 西 元 2013 年 12 月 3 日 推 出 MIT App Inventor 2 網 站, 提 供 免 費 的 雲 端 服 務, 使 用 者 可 以 透 過 瀏 覽 器 來 開 發 Android 裝 置 應 用 程 式, 該 網 站 的 網 址 為 : http

Moto Google Apps TM

<36322D5A CFB5C1D0D2C6B6AFB4F2D3A1BBFA2DB2FAC6B7B9E6B8F1B1EDA3A8C8FDD5DBD2B3A3A E30352E E706466>

ATI-2019安裝手冊-v

<4D F736F F D C4EABCC6CBE3BBFAB4F3C8FCCDA8D6AA E646F63>

epub 61-2

2

Lecture01_Android介绍

VX 680 安装指南

Internet Explorer 10

T1028_Manual_KO_V3 0.pdf

典型自编教材

android讲座

2011 年 第 2 期

Eclipse C C++, or

untitled

財金資訊-83期.indd

GPS ET700 ET700 Microsoft Windows Mobile 6 GPS ET700, USB MHz GPS 256MB Flash 128MB RAM ET700 MSN Office ET QVGA ET700 2

作 業 系 統 簡 介 光 有 電 腦 硬 體, 會 不 容 易 使 用 必 須 要 有 適 當 的 程 式, 才 方 便 操 作 硬 體 衍 生 作 業 系 統 需 求 : 提 供 方 便 使 用 者 執 行 程 式 平 台 有 效 使 用 各 種 電 腦 硬 體 資 源 Jingo C. Lia

<4D F736F F D C4EAC9EEDBDACAD0BCC6CBE3BBFAB2FAD2B5B7A2D5B9B7D6CEF6D1D0BEBF E646F63>

untitled

目 录

CA-C750К

102-5-S4-_1_Trimboxes_ipp.pdf

软件概述

1. ( B ) IT (A) (B) (C) (D) 2. ( A ) (A) (B) (C) (D) 3. ( B ) (A) GPS (B) GIS (C) ETC (D) CAI 4. ( D ) (A) (B) (C) (D) 5. ( B ) (Stored Program) (A) H

附录J:Eclipse教程

GIS数据展示系统用户操作手册

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>

Junos Pulse Mobile Security R1 2012, Juniper Networks, Inc.

RSBook_CN.indb

使 用 本 说 明 书 感 谢 您 选 购 三 星 手 机 本 手 机 基 于 三 星 的 高 科 技 和 高 标 准, 为 您 提 供 极 高 品 质 的 移 动 通 信 和 娱 乐 享 受 本 使 用 说 明 书 专 门 用 于 指 导 您 了 解 手 机 的 功 能 与 特 性 请 先 阅 读

Quick Start Guide

NEXT SDT2.51 C:\ARM251 SDT2.51 ARM SDT 2.51 ARM PROJECT MANAGER SDT 2

Moto g5s Plus

Azure_s

<4D F736F F D20C8EDBCFEA1B A1B33136BAC5A3BAB9D8D3DAB7A2B2BC C4EAC8EDBCFEB9A4B3CCCAB5D1B5D6AED0A3C4DABFC6D1D0CFEEC4BFB5C4CDA8D6AA2E646F63>

精 选 头 条 西 电 东 送 滇 西 北 至 广 东 特 高 压 直 流 工 程 3 日 开 工, 机 构 看 好 今 明 两 年 特 高 压 项 目 利 润 大 规 模 兑 现 上 海 证 券 报 铁 路 总 公 司 决 定 从 4 日 起 下 调 煤 炭 运 价, 据 测 算 全 年 可 为

Secoway SVN3000技术建议书V1

Mac OS X 相 信 不 少 用 過 Windows 作 業 系 統 的 朋 友 會 將 硬 碟 分 割 成 C D 兩 個 或 者 更 多 槽, 所 有 的 文 件 隨 便 往 D 槽 丟, 應 用 程 式 也 是 隨 便 安 裝 到 不 知 名 的 地 方, 等 到 需 要

spring12_preview.pdf

Transcription:

内 容 提 要 作 为 Google 开 发 的 全 新 开 源 手 机 平 台,Android 发 展 如 火 如 荼 本 书 通 过 大 量 代 码 秘 诀 全 面 详 尽 地 讲 述 了 Android 开 发 技 术 从 activity 和 intent 基 础 知 识 开 始, 到 线 程 服 务 broadcast receiver 以 及 alert 警 告 框, 再 到 用 户 界 面 布 局 界 面 事 件 多 媒 体 技 术 硬 件 接 口 网 络 通 信 数 据 存 储 方 法 基 于 位 置 的 服 务 Android 高 级 开 发 技 术 和 调 试, 书 中 贯 穿 了 经 Android 设 备 或 者 模 拟 器 测 试 的 可 用 范 例, 将 功 能 丰 富 结 构 复 杂 的 Android 应 用 程 序 清 晰 完 美 地 展 现 给 开 发 人 员 对 于 那 些 有 志 于 Android 应 用 开 发 的 人 员 来 说, 本 书 是 难 得 的 参 考 读 物 图 灵 程 序 设 计 丛 书 Android 开 发 秘 籍 著 [ 美 ] James Steele Nelson To 译 李 青 王 瑜 赵 丞 兵 等 责 任 编 辑 朱 巍 执 行 编 辑 刘 美 英 人 民 邮 电 出 版 社 出 版 发 行 北 京 市 崇 文 区 夕 照 寺 街 14 号 邮 编 100061 电 子 邮 件 315@ptpress.com.cn 网 址 http://www.ptpress.com.cn 北 京 印 刷 开 本 :800 1000 1/16 印 张 :17.25 字 数 :408 千 字 2011 年 8 月 第 1 版 印 数 :1 4 000 册 2011 年 8 月 北 京 第 1 次 印 刷 著 作 权 合 同 登 记 号 图 字 :01-2010-8067 号 ISBN 978-7-115-25718-5 定 价 :49.00 元 读 者 服 务 热 线 :(010)51095186 转 604 印 装 质 量 热 线 :(010)67129223 反 盗 版 热 线 :(010)67171154

前 言 Android 是 发 展 最 为 迅 速 的 移 动 操 作 系 统 (OS) 以 Android 为 核 心 的 整 个 生 态 系 统 也 在 迅 速 成 长, 仅 去 年 一 年 就 推 出 30 多 种 智 能 手 机, 而 平 均 每 月 新 增 1 万 多 个 应 用 程 序 (APP) 其 设 备 功 能 多 样, 可 供 选 择 的 移 动 运 营 商 众 多, 足 以 让 所 有 人 动 心 上 网 本 是 安 装 Andorid 的 天 然 平 台, 但 Android 的 强 劲 发 展 势 头 使 之 进 一 步 渗 透 到 电 视 机 甚 至 汽 车 工 业 许 多 世 界 知 名 的 大 企 业, 从 银 行 到 快 餐 连 锁 店 和 航 空 公 司, 都 拥 有 了 自 己 的 Android 应 用, 并 提 供 兼 容 服 务 Android 开 发 人 员 获 得 了 更 多 机 会, 因 为 其 应 用 程 序 可 以 接 触 到 比 以 往 任 何 时 候 都 要 多 的 用 户, 增 加 了 开 发 程 序 的 回 报 1 为 什 么 要 写 本 书 Android 操 作 系 统 简 单 易 学, 而 且 谷 歌 提 供 了 许 多 库, 方 便 大 家 实 现 功 能 丰 富 结 构 复 杂 的 应 用 程 序 唯 一 美 中 不 足 的 是 缺 少 清 晰 详 尽 的 文 档,Android 开 发 者 社 区 的 许 多 人 都 提 到 了 这 一 点 Android 的 开 源 意 味 着 任 何 人 都 可 以 深 入 研 究 并 对 一 些 文 件 做 逆 向 工 程 许 多 开 发 者 论 坛 都 使 用 这 种 方 法 推 出 了 优 良 的 范 例 但 我 们 仍 然 需 要 一 本 书 通 过 一 致 的 体 例 来 讨 论 操 作 系 统 的 各 个 方 面 一 个 清 晰 的 可 用 范 例 比 得 上 一 万 字 的 文 档 开 发 人 员 在 面 对 问 题 的 时 候, 通 常 喜 欢 采 用 类 似 极 限 编 程 的 方 法, 也 就 是 说, 他 们 找 到 接 近 解 决 方 案 的 可 用 代 码 范 例, 经 过 修 改 或 扩 展 来 满 足 自 己 的 需 求 学 习 这 些 范 例 也 是 一 种 了 解 编 码 风 格 的 有 效 方 法, 开 发 者 可 按 类 似 风 格 写 出 代 码 的 其 他 部 分 本 书 提 供 了 许 多 完 整 的 秘 诀, 以 满 足 读 者 此 种 需 要 介 绍 每 个 秘 诀 的 同 时, 我 们 也 逐 一 讲 解 Android 操 作 系 统 的 主 要 概 念 目 标 读 者 编 写 Android 应 用 程 序 的 开 发 人 员 将 是 本 书 的 最 大 获 益 者 我 假 设 读 者 了 解 基 本 的 Java 和 Eclipse 开 发 环 境, 但 对 于 本 书 大 部 分 内 容 这 点 并 非 必 要 Java 是 一 种 模 块 化 的 语 言, 大 部 分 ( 甚 至 全 部 ) 的 秘 诀 范 例 经 过 些 许 修 改 就 可 以 整 合 到 读 者 自 己 的 Android 工 程 中 我 们 编 写 每 个 主 题 时 都 考 虑 到 可 以 将 其 作 为 Android 课 程 的 补 充 材 料 1 秘 籍, 此 处 的 原 文 为 cookbook( 食 谱 ), 引 申 为 秘 籍 的 意 思, 后 文 中 的 recipe 是 秘 诀 的 意 思 即 这 本 秘 籍 由 大 量 秘 诀 组 成 译 者 注

2 前 言 如 何 使 用 本 书 总 体 上, 本 书 中 的 代 码 秘 诀 内 容 丰 富 完 整, 包 含 了 在 Android 设 备 上 运 行 应 用 程 序 所 有 必 要 的 信 息 第 1 章 和 第 2 章 从 整 体 上 介 绍 了 Android 的 使 用, 当 然, 你 可 以 跳 过 这 一 部 分, 从 更 重 要 的 地 方 开 始 看 起 这 本 书 是 作 为 参 考 书 来 写 的, 书 中 主 要 通 过 范 例 讲 述 Android 开 发 知 识, 这 些 范 例 实 现 了 有 意 思 的 秘 诀, 会 让 你 受 益 匪 浅 秘 诀 中 介 绍 的 主 要 技 术 均 在 标 题 中 体 现 此 外, 每 个 秘 诀 在 必 要 时 还 介 绍 了 其 他 相 关 技 术 读 完 本 书 以 后, 开 发 人 员 应 该 能 够 : 从 头 开 始 编 写 Android 应 用 程 序 ; 编 写 适 用 于 多 个 Android 版 本 的 程 序 ; 使 用 Android 提 供 的 各 种 应 用 编 程 接 口 (API); 博 览 大 量 代 码, 迅 速 运 用 到 自 己 的 程 序 中 ; 学 会 在 Android 中 用 多 种 方 法 完 成 同 样 任 务, 体 会 各 种 方 法 的 优 劣 ; 理 解 Android 编 程 的 独 特 魅 力 本 书 结 构 第 1 章 将 介 绍 Android 开 发 的 方 方 面 面, 但 不 涉 及 代 码 层 面 这 是 唯 一 不 包 括 秘 诀 的 一 章, 但 提 供 了 有 用 的 背 景 知 识 第 2 章 概 要 介 绍 了 4 个 Android 组 件, 以 及 Android 工 程 是 如 何 组 织 的 本 章 着 重 介 绍 了 作 为 应 用 程 序 主 要 构 成 的 activity 第 3 章 介 绍 了 线 程 服 务 接 收 器 等 后 台 服 务, 以 及 作 为 这 些 后 台 任 务 的 通 知 方 法 使 用 的 alert 警 告 框 第 4 章 涵 盖 了 用 户 界 面 屏 幕 布 局 和 视 图 第 5 章 涉 及 用 户 触 发 的 事 件, 如 触 摸 事 件 和 手 势 第 6 章 讲 的 是 多 媒 体 操 作 录 制 以 及 音 频 和 视 频 播 放 第 7 章 介 绍 了 Android 设 备 的 硬 件 API 及 其 使 用 方 法 第 8 章 讨 论 了 Android 设 备 和 外 界 应 用 的 交 互, 包 括 SMS 网 页 浏 览 和 社 交 网 络 第 9 章 涵 盖 了 Android 中 使 用 的 各 种 数 据 存 储 技 术, 包 括 SQLite 第 10 章 着 重 介 绍 了 通 过 GPS 等 不 同 的 方 法 获 取 位 置 信 息, 以 及 使 用 诸 如 谷 歌 地 图 API 的 相 关 服 务 第 11 章 介 绍 一 些 Android 的 高 级 技 巧, 包 括 自 定 义 视 图 使 用 原 生 代 码 获 得 更 快 的 处 理 速 度, 以 及 使 用 Android 备 份 管 理 器 等 最 后, 第 12 章 讲 述 了 对 整 个 开 发 周 期 都 非 常 有 用 的 测 试 和 调 试 框 架 补 充 参 考 资 料 网 上 有 许 多 Android 的 在 线 参 考 信 息 以 下 是 一 些 必 看 的 经 典 网 站 Android 源 代 码 :http://source.android.com/ Android 开 发 者 主 页 :http://developer.android.com/ Android 开 发 者 论 坛 :http://www.svcandroid.com/ 开 放 源 码 目 录 :http://osdir.com/ 栈 溢 出 论 坛 (Stack Overflow Discussion Threads):http://stackoverflow.com/ Android 开 发 者 讲 坛 (Talk Android Developer Forums):http://www.talkandroid.com/androidforums/

目 录 第 1 章 Android 概 述... 1 1.1 Android 演 化 史... 1 1.2 Android 的 两 面 性... 2 1.3 运 行 Android 的 设 备... 2 1.3.1 HTC 系 列 机 型... 4 1.3.2 摩 托 罗 拉 系 列 机 型... 4 1.3.3 三 星 系 列 机 型... 4 1.3.4 平 板 电 脑... 5 1.3.5 其 他 设 备... 5 1.4 Android 设 备 的 硬 件 差 异... 5 1.4.1 屏 幕... 5 1.4.2 用 户 输 入 方 式... 6 1.4.3 传 感 器... 6 1.5 Android 的 特 点... 8 1.5.1 多 进 程 和 应 用 程 序 微 件... 8 1.5.2 触 摸 手 势 和 多 点 触 控... 8 1.5.3 硬 键 盘 和 软 键 盘... 8 1.6 Android 开 发... 8 1.6.1 如 何 使 用 本 书 中 的 秘 诀... 8 1.6.2 好 好 设 计 应 用 程 序... 9 1.6.3 保 持 向 前 兼 容... 9 1.6.4 健 壮 性... 10 1.7 软 件 开 发 工 具 包... 10 1.7.1 安 装 与 更 新... 10 1.7.2 软 件 特 性 和 API 级 别... 11 1.7.3 利 用 模 拟 器 或 真 机 调 试 程 序... 12 1.7.4 使 用 Android 调 试 桥... 13 1.7.5 签 名 和 发 布 应 用... 14 1.8 Android Market... 14 1.8.1 最 终 用 户 许 可 协 议... 14 1.8.2 提 升 应 用 程 序 的 曝 光 率... 15 1.8.3 脱 颖 而 出... 15 1.8.4 为 应 用 程 序 收 费... 15 1.8.5 管 理 评 论 和 更 新... 16 1.8.6 Android Market 的 候 补 之 选... 17 第 2 章 应 用 程 序 基 础 知 识 : activity 和 intent... 18 2.1 Android 应 用 程 序 预 览... 18 2.1.1 秘 诀 1: 创 建 工 程 并 新 建 activity... 19 2.1.2 工 程 目 录 结 构 及 自 动 生 成 内 容... 20 2.1.3 Android 包 和 Manifest 清 单 文 件... 22 2.1.4 重 命 名 应 用 程 序 中 的 部 分 文 件... 23 2.2 Activity 的 生 命 周 期... 23 2.2.1 秘 诀 2: 使 用 其 他 的 生 命 周 期 方 法... 24 2.2.2 秘 诀 3: 强 制 执 行 单 任 务 模 式... 26 2.2.3 秘 诀 4: 强 制 屏 幕 方 向... 26 2.2.4 秘 诀 5: 保 存 和 恢 复 activity 信 息... 27 2.3 多 个 activity... 28 2.3.1 秘 诀 6: 使 用 按 钮 和 文 本 框... 28 2.3.2 秘 诀 7: 通 过 事 件 启 动 另 外 一 个 activity... 29 2.3.3 秘 诀 8: 将 语 音 转 换 成 文 本 并 启 动 activity 显 示 结 果... 32 2.3.4 秘 诀 9: 实 现 选 择 列 表... 34 2.3.5 秘 诀 10: 使 用 隐 式 intent 创 建 activity... 35 2.3.6 秘 诀 11: 在 activity 间 传 递 基 本 数 据 类 型... 37

2 目 录 第 3 章 线 程 服 务 receiver 以 及 alert 对 话 框... 40 3.1 线 程... 40 3.1.1 秘 诀 12: 启 动 一 个 辅 助 线 程... 40 3.1.2 秘 诀 13: 创 建 实 现 runnable 接 口 的 activity... 44 3.1.3 秘 诀 14: 设 置 线 程 优 先 级... 45 3.1.4 秘 诀 15: 取 消 线 程... 45 3.1.5 秘 诀 16: 在 两 个 应 用 程 序 之 间 共 享 线 程... 46 3.2 线 程 之 间 的 消 息 机 制 :handler... 46 3.2.1 秘 诀 17: 从 主 线 程 调 度 runnable 任 务... 46 3.2.2 秘 诀 18: 使 用 倒 数 计 时 器... 49 3.2.3 秘 诀 19: 处 理 耗 时 的 初 始 化 工 作... 50 3.3 服 务... 51 3.4 添 加 broadcast receiver... 56 3.5 应 用 微 件... 58 3.6 alert 对 话 框... 60 3.6.1 秘 诀 23: 使 用 Toast 在 屏 幕 上 显 示 简 短 消 息... 61 3.6.2 秘 诀 24: 使 用 alert 对 话 框... 61 3.6.3 秘 诀 25: 在 状 态 栏 中 显 示 通 知... 62 第 4 章 用 户 界 面 布 局... 65 4.1 资 源 目 录 及 其 基 本 属 性... 65 4.2 view 和 viewgroup... 67 4.2.1 秘 诀 27: 利 用 Eclipse 编 辑 器 生 成 布 局... 68 4.2.2 秘 诀 28: 控 制 UI 元 素 的 宽 度 和 高 度... 71 4.2.3 秘 诀 29: 设 置 相 对 布 局 和 布 局 ID... 73 4.2.4 秘 诀 30: 通 过 编 程 声 明 布 局... 74 4.2.5 秘 诀 31: 使 用 独 立 线 程 更 新 布 局... 75 4.3 文 本 操 作... 78 4.3.1 秘 诀 32: 设 置 和 更 改 文 本 属 性... 79 4.3.2 秘 诀 33: 提 供 文 本 输 入... 81 4.3.3 秘 诀 34: 创 建 表 单... 82 4.4 其 他 控 件 : 从 按 钮 到 拖 动 条... 83 4.4.1 秘 诀 35: 在 表 格 布 局 中 使 用 图 像 按 钮... 83 4.4.2 秘 诀 36: 使 用 复 选 框 和 开 关 按 钮... 86 4.4.3 秘 诀 37: 使 用 单 选 按 钮... 90 4.4.4 秘 诀 38: 创 建 下 拉 菜 单... 90 4.4.5 秘 诀 39: 使 用 进 度 条... 92 4.4.6 秘 诀 40: 使 用 拖 动 条... 94 第 5 章 用 户 界 面 事 件... 97 5.1 事 件 处 理 器 和 事 件 监 听 器... 97 5.1.1 秘 诀 41: 截 取 物 理 按 键 事 件... 97 5.1.2 秘 诀 42: 创 建 菜 单... 100 5.1.3 秘 诀 43: 在 XML 文 件 中 定 义 菜 单... 104 5.1.4 秘 诀 44: 使 用 搜 索 键... 105 5.1.5 秘 诀 45: 响 应 触 摸 事 件... 107 5.1.6 秘 诀 46: 监 听 滑 动 手 势... 109 5.1.7 秘 诀 47: 使 用 多 点 触 控... 110 5.2 高 级 用 户 界 面 库... 113 5.2.1 秘 诀 48: 使 用 手 势... 114 5.2.2 秘 诀 49: 绘 制 3D 图 像... 117 第 6 章 多 媒 体 技 术... 122 6.1 图 像... 123 6.2 音 频... 128 6.2.1 秘 诀 51: 选 取 和 播 放 音 频 文 件... 128 6.2.2 秘 诀 52: 录 制 音 频 文 件... 131 6.2.3 秘 诀 53: 处 理 原 始 音 频... 132 6.2.4 秘 诀 54: 有 效 使 用 音 频 资 源... 136 6.2.5 秘 诀 55: 添 加 媒 体 资 源 并 更 新 路 径... 137 6.3 视 频... 138 第 7 章 硬 件 接 口... 140 7.1 照 相 机... 140 7.2 其 他 传 感 器... 145 7.2.1 秘 诀 57: 获 取 设 备 旋 转 姿 态... 146

目 录 3 7.2.2 秘 诀 58: 使 用 温 度 传 感 器 和 光 传 感 器... 149 7.3 电 话... 150 7.3.1 秘 诀 59: 使 用 电 话 管 理 器... 150 7.3.2 秘 诀 60: 监 听 电 话 状 态... 152 7.3.3 秘 诀 61: 拨 打 电 话 号 码... 154 7.4 蓝 牙... 154 7.4.1 秘 诀 62: 打 开 蓝 牙... 155 7.4.2 秘 诀 63: 搜 索 蓝 牙 设 备... 155 7.4.3 秘 诀 64: 与 已 绑 定 的 蓝 牙 设 备 配 对... 156 7.4.4 秘 诀 65: 打 开 蓝 牙 套 接 字... 156 7.4.5 秘 诀 66: 使 用 设 备 振 动 功 能... 159 7.4.6 秘 诀 67: 访 问 无 线 网 络... 159 第 8 章 网 络 通 信... 161 8.1 使 用 短 信 息... 161 8.2 使 用 Web 内 容... 169 8.2.1 秘 诀 69: 定 制 Web 浏 览 器... 169 8.2.2 秘 诀 70: 使 用 HTTP GET 请 求... 170 8.2.3 秘 诀 71: 使 用 HTTP POST 请 求... 174 8.3 社 交 网 络... 174 第 9 章 数 据 存 储 方 法... 184 9.1 shared preferences... 184 9.1.1 秘 诀 73: 创 建 和 检 索 shared preferences... 184 9.1.2 秘 诀 74: 使 用 preferences 框 架... 185 9.1.3 秘 诀 75: 基 于 Stored Data 改 变 用 户 界 面... 187 9.1.4 秘 诀 76: 添 加 最 终 用 户 许 可 协 议... 190 9.2 SQLite 数 据 库... 194 9.2.1 秘 诀 77: 创 建 一 个 独 立 的 数 据 库 包... 194 9.2.2 秘 诀 78: 使 用 独 立 的 数 据 库 包... 197 9.2.3 秘 诀 79: 创 建 个 人 日 记... 200 9.3 内 容 提 供 器... 204 9.4 保 存 和 载 入 文 件... 209 第 10 章 基 于 位 置 的 服 务... 210 10.1 位 置 服 务 入 门... 210 10.1.1 秘 诀 81: 获 取 最 新 位 置... 212 10.1.2 秘 诀 82: 在 位 置 改 变 时 更 新 信 息... 212 10.1.3 秘 诀 83: 列 出 所 有 可 用 的 提 供 器... 214 10.1.4 秘 诀 84: 将 位 置 解 析 为 地 址 ( 反 向 地 理 编 码 )... 216 10.1.5 秘 诀 85: 将 地 址 解 析 为 位 置 ( 地 理 编 码 )... 218 10.2 使 用 谷 歌 地 图... 220 10.2.1 秘 诀 86: 在 应 用 程 序 中 添 加 谷 歌 地 图... 222 10.2.2 秘 诀 87: 在 地 图 上 添 加 标 记... 224 10.2.3 秘 诀 88: 在 地 图 上 添 加 视 图... 228 10.2.4 秘 诀 89: 在 地 图 上 标 记 设 备 的 当 前 位 置... 230 10.2.5 秘 诀 90: 设 置 临 近 警 告... 231 第 11 章 Android 高 级 开 发 技 术... 232 11.1 Android 的 自 定 义 视 图... 232 11.2 Android 的 原 生 组 件... 238 11.3 Android 的 安 全 机 制... 241 11.4 Android 的 进 程 间 通 信... 242 11.5 Android 的 备 份 管 理 器... 247 11.5.1 秘 诀 95: 备 份 运 行 时 数 据... 247 11.5.2 秘 诀 96: 备 份 文 件 到 云 端... 248 11.5.3 秘 诀 97: 触 发 备 份 与 还 原 操 作... 249 11.6 Android 的 动 画 功 能... 250 第 12 章 调 试... 255 12.1 Eclipse 内 置 的 调 试 工 具... 255 12.1.1 秘 诀 99: 设 置 运 行 配 置... 255 12.1.2 秘 诀 100: 使 用 DDMS... 256 2 3 4 5 6 7 8 9 10 11 12

4 目 录 12.1.3 秘 诀 101: 断 点 调 试... 257 12.2 Android SDK 中 的 调 试 工 具... 258 12.2.1 秘 诀 102: 使 用 Android Debug Bridge 工 具... 258 12.2.2 秘 诀 103: 使 用 LogCat 工 具... 259 12.2.3 秘 诀 104: 使 用 Hierarchy Viewer 工 具... 261 12.2.4 秘 诀 105: 使 用 TraceView 工 具... 262 12.3 Android 系 统 调 试 工 具... 264

1.1 Android 演 化 史 1 第 1 章 Android 概 述 1 2 3 A ndroid 操 作 系 统 自 2007 年 年 末 由 开 放 手 机 联 盟 (Open Handset Alliance) 发 布 以 来, 已 经 取 得 了 长 足 的 进 步 为 嵌 入 式 系 统 设 计 开 源 操 作 系 统 这 一 想 法 由 来 已 久, 但 谷 歌 的 积 极 支 持 无 疑 推 动 了 Android 在 短 短 数 年 时 间 就 跻 身 业 界 前 列 各 国 众 多 移 动 运 营 商 在 不 同 的 通 信 协 议 下 都 推 出 了 Android 手 机 Android 操 作 系 统 还 被 应 用 在 其 他 嵌 入 式 设 备 中, 如 平 板 电 脑 上 网 本 电 视 机 机 顶 盒, 甚 至 汽 车 也 开 始 使 用 它 了 本 章 将 介 绍 Android 开 发 的 各 种 一 般 性 问 题, 了 解 这 些 问 题 对 于 开 发 者 非 常 有 益 它 是 创 建 Android 应 用 程 序 的 基 础 知 识, 并 且 为 本 书 其 余 部 分 介 绍 的 编 程 秘 诀 提 供 了 背 景 知 识 1.1 Android 演 化 史 谷 歌 公 司 看 到 互 联 网 使 用 和 移 动 设 备 搜 索 的 巨 大 增 长 潜 力, 于 2005 年 收 购 了 Android 公 司, 并 主 攻 移 动 设 备 平 台 的 开 发 苹 果 公 司 于 2007 年 推 出 了 iphone 手 机, 带 来 了 多 触 点 和 开 放 的 应 用 程 序 市 场 等 一 些 具 有 开 创 性 的 想 法 Android 迅 速 跟 进, 将 这 些 功 能 囊 括 其 中, 还 提 供 一 些 特 有 的 功 能, 例 如 开 发 者 对 系 统 有 更 多 控 制 能 力, 实 现 多 任 务 功 能 等 此 外,Android 集 成 了 企 业 级 的 需 求, 如 支 持 交 流 远 程 擦 除 (wipe) 和 虚 拟 专 用 网 (VPN), 以 谋 求 赢 得 企 业 市 场 而 目 前 在 该 领 域 中,RIM 公 司 凭 借 其 黑 莓 机 型 发 展 得 很 好 对 多 种 设 备 的 支 持 和 快 速 应 变 使 得 Android 扩 大 了 其 用 户 规 模, 但 这 给 开 发 者 带 来 了 挑 战 应 用 程 序 需 要 支 持 五 花 八 门 的 屏 幕 尺 寸 分 辨 率 键 盘 硬 件 传 感 器 OS 版 本 无 线 数 据 传 输 速 率 和 系 统 配 置 每 项 处 理 不 当 都 可 能 导 致 不 可 预 知 的 诡 异 表 现, 但 又 不 可 能 在 所 有 环 境 下 都 做 应 用 程 序 测 试 因 此,Android 的 设 计 力 求 在 跨 平 台 时 可 以 获 得 一 致 的 体 验 通 过 将 硬 件 差 异 抽 象 处 理, Android 操 作 系 统 试 图 将 应 用 和 具 体 设 备 差 异 隔 离 开, 同 时 在 需 要 时 还 可 以 灵 活 调 整 应 用 程 序 要 兼 容 未 来 的 变 化, 以 适 应 新 的 硬 件 平 台 和 操 作 系 统, 这 也 是 要 事 先 考 虑 的 只 有 开 发 者 意 识 到 这 种 系 统 化 的 方 法, 才 能 做 到 这 一 点 Android 提 供 的 通 用 API 和 如 何 确 保 设 备 和 操 作 系 统 的 兼 容 性 是 贯 穿 本 书 的 讨 论 主 题 和 任 何 嵌 入 式 平 台 相 同, 我 们 必 须 进 行 全 面 的 测 试 谷 歌 通 过 Android 开 发 工 具 (ADT, 该 工 具 是 Eclipse 的 插 件, 也 可 作 为 独 立 的 工 具 使 用 ) 向 第 三 方 开 发 者 提 供 了 各 种 形 式 的 帮 助, 包 括 4 5 6 7 8 9 10 11 12

2 第 1 章 Android 概 述 实 时 日 志 功 能 可 以 运 行 原 生 ARM 代 码 的 仿 真 模 拟 器, 另 外, 用 户 可 以 向 Android Market 应 用 的 开 发 者 提 交 现 场 错 误 报 告 1.2 Android 的 两 面 性 Android 有 一 些 有 趣 的 两 面 性 提 前 知 晓 这 些 内 容 有 助 于 了 解 Android 是 什 么 及 不 是 什 么 Android 是 一 个 由 Linux 内 核 提 供 核 心 系 统 服 务 的 嵌 入 式 操 作 系 统, 但 它 不 是 嵌 入 式 的 Linux 例 如, 它 不 支 持 标 准 的 Linux 工 具, 如 X-Windows 和 GNU C 库 我 们 使 用 Java 框 架 编 写 Android 的 应 用 程 序, 但 它 不 是 Java 语 言, 并 不 支 持 Swing 等 标 准 Java 库 其 他 Java 库, 如 Timer 等, 也 不 支 持, 它 们 已 被 Android 自 己 的 库 替 代, 这 些 库 已 针 对 资 源 有 限 的 嵌 入 式 环 境 进 行 了 优 化 Android 的 操 作 系 统 开 放 源 代 码, 这 意 味 着 开 发 人 员 可 以 查 看 和 使 用 任 何 系 统 的 源 代 码, 包 括 射 频 协 议 栈 (radio stack) 这 些 源 代 码 是 大 家 了 解 Android 代 码 运 行 原 理 的 第 一 手 资 料, 在 文 档 缺 乏 的 情 况 下 可 以 作 为 参 考 这 也 意 味 着 开 发 人 员 可 以 遵 照 系 统 核 心 程 序 那 样 的 方 式 使 用 系 统, 可 以 用 他 们 自 己 的 组 件 替 换 系 统 组 件 不 过,Android 设 备 也 包 含 一 些 开 发 者 无 法 访 问 的 专 有 软 件, 如 全 球 定 位 系 统 导 航 Android OS 的 最 后 一 个 两 面 性 特 点 是 谷 歌 还 支 持 Chrome OS Android OS 专 为 嵌 入 式 平 台 构 建, 而 Chrome OS 基 于 云 计 算 平 台 构 建 然 而, 哪 个 操 作 系 统 才 是 基 于 云 端 的 嵌 入 式 设 备 的 最 好 选 择? 上 网 本 填 补 了 智 能 手 机 和 笔 记 本 电 脑 之 间 的 空 白, 两 者 都 有 可 能 会 是 其 发 展 方 向 ( 实 际 上 已 经 呈 现 了 这 样 的 趋 势 ) Android 已 经 开 始 更 多 地 利 用 云 服 务 这 是 否 意 味 着 Chrome OS 的 末 路 指 日 可 待? 谷 歌 同 时 也 支 持 基 于 Web 的 市 场, 因 此 Chrome OS 目 前 享 有 和 Android 同 等 的 开 发 者 支 持 这 或 许 表 明 未 来 的 融 合 早 已 在 筹 划 之 中 1.3 运 行 Android 的 设 备 市 场 上 目 前 有 十 多 个 制 造 商 提 供 四 十 余 种 Android 手 机 此 外, 其 他 硬 件 也 运 行 Android, 如 平 板 电 脑 和 电 视 机 软 件 可 以 通 过 android.os.build 类 获 得 目 标 设 备 的 信 息, 例 如 : 由 于 其 操 作 系 统 的 特 质,Android 支 持 的 硬 件 具 有 一 些 共 同 的 特 性 Android OS 由 以 下 image 文 件 组 成 : Bootloader 在 设 备 启 动 时 开 始 加 载 Boot image; Boot image Kernel 和 RAMdisk; System image Android 操 作 系 统 平 台 和 应 用 程 序 ; Data image 断 电 后 保 存 的 用 户 数 据 ; Recovery image 重 建 或 更 新 系 统 所 用 的 文 件 ; Radio image 射 频 协 议 栈 文 件 这 些 image 文 件 存 储 在 非 易 失 性 闪 存 中, 因 此 在 设 备 断 电 时 仍 然 不 会 丢 失 闪 存 使 用 起 来 相 当 于 只 读 存 储 器 ( 因 此 有 人 称 之 为 ROM), 但 可 以 在 需 要 时 将 其 重 写 ( 例 如,Android 操 作 系 统 无

1.3 运 行 Android 的 设 备 3 线 升 级 ) 启 动 时, 微 处 理 器 执 行 Bootloader 来 加 载 内 核 和 RAMdisk 到 RAM 中, 以 快 速 存 取 然 后, 微 处 理 器 执 行 所 需 的 指 令 系 统 页 面 和 数 据 镜 像 到 RAM Radio image 由 基 带 处 理 器 处 理, 后 者 直 接 连 接 到 射 频 硬 件 表 1-1 比 较 了 早 期 和 近 期 推 出 的 智 能 手 机 机 型 结 果 表 明, 不 同 设 备 的 运 算 处 理 部 分 的 硬 件 结 构 非 常 相 似, 都 包 括 微 处 理 器 单 元 (MPU) 同 步 动 态 随 机 存 取 记 忆 体 (SDRAM 或 简 称 RAM) 以 及 闪 存 ( 简 称 ROM) 等 屏 幕 大 小 通 过 像 素 (pixel) 来 衡 量, 但 每 英 寸 点 数 (dpi) 不 同 的 物 理 屏 幕 是 不 相 同 的 例 如,HTC Magic 手 机 采 用 320 480 像 素 的 3.2 英 寸 屏 幕, 这 相 当 于 每 英 寸 180 像 素, 在 Android 手 机 中 处 于 中 等 水 平 ( 平 均 水 平 为 160 dpi) 所 有 的 智 能 手 机 都 配 备 了 CMOS 图 像 传 感 器 的 摄 像 头 蓝 牙 (BT) 和 Wi-Fi(802.11), 当 然 规 格 各 异 表 1-1 一 些 有 代 表 性 的 Android 智 能 手 机 数 据 来 源 于 http://en.wikipedia.org/wiki/list_of_android_devices 和 http://pdadb.net/ 型 号 MPU RAM/ROM 屏 幕 其 他 特 性 HTC Dream/G1 (2008 年 10 月 ) 三 星 Moment (2009 年 11 月 ) 摩 托 罗 拉 Milestone/Droid (2009 年 11 月 ) Nexus One/HTC Passion(2010 年 1 月 ) HTC Droid Incredible (2010 年 4 月 ) HTC EVO 4G (2010 年 6 月 ) 摩 托 罗 拉 Droid X (2010 年 6 月 ) 索 爱 Xperia X10a (2010 年 6 月 ) 三 星 Galaxy S Pro (2010 年 8 月 ) 宏 碁 Stream/ Liquid (2010 年 9 月 ) 528-MHz QCOM MSM7201A 800-MHz ARM 1176 JZF-S 550-MHz OMAP3430 TI 1-GHz QCOM Snapdragon 1-GHz QCOM Snapdragon 1-GHz QCOM Snapdragon 1-GHz OMAP3630 TI 1-GHz QCOM Snapdragon 1-GHz 三 星 Hummingbird 1-GHz QCOM Snapdragon 192 MB/256 MB TFT LCD 320 480 mdpi 288 MB/512 MB AMOLED 320 480 mdpi 256 MB/512 MB TFT LCD 480 854 hdpi 512 MB/512 MB AMOLED 480 800 hdpi 512 MB/512 MB AMOLED 480 800 hdpi 512 MB/1 GB AMOLED 480 800 hdpi 512 MB/8 GB TFT LCD 480 854 hdpi 256 MB/1 GB TFT LCD 480 854 hdpi 512 MB/2 GB AMOLED 480 800 hdpi 512 MB/512 MB AMOLED 480 800 hdpi GSM/UMTS 侧 滑 式 键 盘 轨 迹 球 AGPS, 蓝 牙 2.0 802.11b/g 310 万 像 素 摄 像 头 CDMA/1xEV-DO, 侧 滑 式 键 盘 ( 带 背 光 ) DPAD, 蓝 牙 2.0 802.11b/g 310 万 像 素 摄 像 头,AGPS GSM/UMTS 或 CDMA/1xEV-DO, 侧 滑 式 键 盘 DPAD, 蓝 牙 2.1 802.11b/g 500 万 像 素 摄 像 头,AGPS GSM/UMTS 轨 迹 球 双 麦 克 风, 蓝 牙 2.0 802.11a/b/g/n 500 万 像 素 摄 像 头, AGPS 地 理 标 记 功 能 CDMA/1xEV-DO, 蓝 牙 2.1 802.11a/b/g/n 800 万 像 素 摄 像 头,AGPS 地 理 标 记 功 能 CDMA/1xEV-DO/802.16e-2005, 蓝 牙 2.1 802.11b/g 800 万 像 素 摄 像 头,130 万 像 素 前 置 摄 像 头 AGPS CDMA/1xEV-DO 调 频 收 音 机, 蓝 牙 2.1 802.11b/g/n 800 万 像 素 摄 像 头, AGPS 地 理 标 记 功 能 GSM/UMTS 调 频 收 音 机, 蓝 牙 2.1 802.11b/g 800 万 像 素 摄 像 头,AGPS 地 理 标 记 功 能 CDMA/1xEV-DO 802.16 调 频 收 音 机, 侧 滑 式 键 盘, 蓝 牙 3.0 802.11b/g/n 500 万 像 素 摄 像 头,30 万 像 素 前 置 摄 像 头 AGPS GSM/UMTS 调 频 收 音 机, 蓝 牙 2.1 802.11b/g/n 500 万 像 素 摄 像 头,AGPS 地 理 标 记 功 能 1 2 3 4 5 6 7 8 9 10 11 12

4 第 1 章 Android 概 述 除 了 在 容 量 和 性 能 上 有 所 改 善 外, 较 新 型 号 的 另 一 个 主 要 特 色 是 附 加 功 能 有 些 设 备 提 供 了 4G 网 络, 有 的 添 加 了 调 频 收 音 机, 有 的 具 有 侧 滑 式 键 盘, 还 有 的 配 备 了 前 置 摄 像 头 了 解 设 备 的 这 些 差 异 有 助 于 开 发 人 员 做 出 优 秀 的 应 用 除 了 那 些 内 置 硬 件 外, 每 个 Android 设 备 都 有 安 全 数 字 (SD) 卡 插 槽 SD 卡 可 提 供 额 外 的 存 储 空 间, 用 来 存 储 多 媒 体 等 应 用 程 序 数 据 然 而, 在 Andorid 2.2 版 以 前, 应 用 程 序 本 身 只 能 存 储 在 内 部 ROM 中 1.3.1 HTC 系 列 机 型 HTC( 宏 达 ) 是 一 家 成 立 于 1997 年 的 台 湾 公 司 HTC Dream( 也 称 为 G1,G 指 代 谷 歌 ) 是 第 一 个 运 行 Android 的 商 用 硬 件 该 机 型 于 2008 年 10 月 发 布 从 那 时 开 始 到 现 在,HTC 已 推 出 了 十 多 款 运 行 Android 的 手 机, 包 括 谷 歌 公 司 的 Nexus One Nexus One 是 第 一 批 使 用 1 GHz 微 处 理 器 的 Android 设 备, 这 种 微 处 理 器 是 高 通 公 司 (Qualcomm) 的 Snapdragon 平 台 Snapdragon 使 用 了 高 通 自 己 的 内 核, 而 非 ARM 内 核, 它 包 含 有 720 p 高 清 晰 度 视 频 解 码 电 路 在 此 之 后 的 大 部 分 智 能 手 机 都 采 用 了 1 GHz 的 微 处 理 器 Nexus One 的 特 别 之 处 还 在 于 使 用 两 个 麦 克 风 削 减 通 话 时 的 背 景 噪 音, 以 及 配 备 了 背 光 轨 迹 球, 可 根 据 通 知 显 示 不 同 颜 色 的 灯 光 HTC 还 于 2010 年 4 月 发 布 了 Droid Increadible 机 型 如 表 1-1 所 示, 它 和 Nexus One 类 似, 但 基 于 CDMA 而 不 是 GSM 射 频 硬 件, 并 具 有 更 高 像 素 的 摄 像 头 在 2010 年 6 月 发 布 的 HTC EVO 4G 是 第 一 款 支 持 WiMAX(802.16e-2005 标 准 ) 的 商 用 手 机 1.3.2 摩 托 罗 拉 系 列 机 型 20 世 纪 80 年 代 摩 托 罗 拉 制 造 了 第 一 部 手 机, 并 在 手 机 市 场 上 取 得 多 方 面 的 成 功 它 的 无 线 通 信 部 门 对 于 发 展 方 向 摇 摆 不 定, 直 到 最 近 才 把 重 点 放 在 Android 上 摩 托 罗 拉 Droid 的 CDMA 版 本 ( 它 的 GSM 版 本 就 是 闻 名 全 球 的 Milestone 1 ) 于 2009 年 11 月 发 布, 很 多 人 也 确 实 认 为 这 是 Android 发 展 的 一 个 重 要 的 里 程 碑 Droid 手 机 的 影 响 力 很 明 显, 访 问 Android Market 的 相 当 多 的 手 机 都 是 Droid 手 机 此 外, 摩 托 罗 拉 已 经 推 出 了 近 十 款 其 他 Android 手 机 摩 托 罗 拉 Droid X 手 机 具 有 和 HTC Droid Incredible 相 似 的 功 能, 包 括 高 清 视 频 拍 摄 功 能 1.3.3 三 星 系 列 机 型 三 星 一 直 是 移 动 市 场 的 重 要 力 量, 目 前, 已 经 开 始 发 展 自 己 的 Android 设 备 三 星 于 2009 年 11 月 推 出 了 三 星 Moment 手 机, 但 不 具 备 多 点 触 摸 硬 件 功 能, 不 能 升 级 到 Android 2.1 以 上 版 本 在 特 定 市 场 销 售 的 配 备 了 移 动 电 视 天 线 的 定 制 版 本 可 移 动 接 收 ATSC 信 号 三 星 Galaxy S 是 三 星 对 于 iphone 的 回 应 众 所 周 知,iPhone 3G 和 3GS 使 用 了 三 星 处 理 器, 三 星 为 Galaxy S 开 发 了 具 有 ARM Cortex-8 核 心 的 1GHz 的 Hummingbird( 蜂 鸟 ) 处 理 器 这 也 是 第 一 批 兼 容 蓝 牙 3.0 的 手 机 1 Milestone, 该 款 手 机 的 上 市 名 称, 中 文 意 思 为 里 程 碑, 有 双 关 之 意 译 者 注

1.4 Android 设 备 的 硬 件 差 异 5 1.3.4 平 板 电 脑 苹 果 公 司 推 出 ipad 之 后,Andriod 制 造 商 也 非 常 期 望 推 出 他 们 自 己 的 平 板 电 脑 平 板 电 脑 一 般 具 有 4.8 英 寸 或 更 大 的 屏 幕, 带 有 Wi-Fi 连 接 由 于 很 多 平 板 电 脑 使 用 3G 网 络 无 线 服 务, 它 们 更 像 是 大 屏 幕 的 智 能 手 机 爱 可 视 公 司 (Archos) 是 最 早 在 2009 年 年 底 向 市 场 推 出 Android 平 板 电 脑 的 厂 商 之 一 这 款 平 板 电 脑 具 有 4.8 英 寸 的 屏 幕, 被 称 为 Archos 5 爱 可 视 在 此 之 前 已 经 推 出 了 7 英 寸 机 型 Archos 7 这 些 机 型 配 备 了 硬 盘 驱 动 器, 可 以 存 储 更 多 的 数 据 戴 尔 公 司 推 出 了 5 英 寸 屏 幕 的 Sreak 平 板 电 脑, 还 计 划 推 出 配 备 7 英 寸 屏 幕 和 10 英 寸 屏 幕 的 机 型 三 星 公 司 则 推 出 了 7 英 寸 屏 幕 的 Galaxy Tab 平 板 电 脑 这 些 平 板 电 脑 中 的 很 多 型 号 都 有 一 个 缺 点, 就 是 无 法 访 问 Android Market, 但 情 况 应 该 很 快 就 会 改 变 表 1-2 比 较 了 一 些 型 号 的 平 板 电 脑 表 1-2 一 些 有 代 表 性 的 Android 平 板 电 脑 型 号 MPU RAM/disk 屏 幕 其 他 特 性 爱 可 视 5(2009 年 9 月 ) 爱 可 视 7(2010 年 6 月 ) 戴 尔 Streak(2010 年 6 月 ) 三 星 Galaxy Tablet GT-P1000(2010 年 9 月 ) 1.3.5 其 他 设 备 800-MHz TI OMAP 3440 256 MB/8 GB TFT LCD 4.8 英 寸 800 480 600-MHz Rockchip RK2808 128 MB/8 GB TFT LCD 7 英 寸 800 480 1-GHz QCOM Snapdragon 256 MB/512 MB TFT LCD 5 英 寸 800 480 1-GHz 三 星 Hummingbird 512 MB/16 GB TFT LCD 7 英 寸 1024 600 蓝 牙 2.0 802.11b/g/n 调 频 收 音 机 802.11b/g GSM/UMTS 蓝 牙 2.1 802.11b/g 500 万 像 素 摄 像 头 30 万 像 素 前 置 摄 像 头, AGPS 地 理 标 记 功 能 GSM/UMTS, 蓝 牙 3.0 802 11b/g/n 310 万 像 素 摄 像 头 Android 是 一 个 通 用 的 嵌 入 式 平 台, 除 智 能 手 机 和 平 板 电 脑 以 外, 也 可 以 在 许 多 其 他 行 业 使 用 第 一 款 带 有 Android 设 备 的 汽 车 是 由 上 海 汽 车 工 业 总 公 司 制 造 的 荣 威 350 Andorid 主 要 用 于 GPS 导 航, 但 也 可 以 进 行 网 页 浏 览 第 一 款 基 于 Android 的 电 视 是 Google TV, 它 是 谷 歌 的 软 件 索 尼 的 电 视 机 英 特 尔 的 处 理 器 和 罗 技 的 机 顶 盒 相 结 合 的 产 物 它 将 互 联 网 自 然 而 然 地 引 入 了 电 视 机, 但 它 也 提 供 了 从 电 视 机 访 问 Android Market 的 功 能 1.4 Android 设 备 的 硬 件 差 异 Android 设 备 在 硬 件 上 会 有 一 些 差 异, 如 表 1-1 所 示 一 般 来 说, 大 部 分 的 差 异 对 开 发 者 都 是 透 明 的, 不 在 本 书 中 进 一 步 讨 论 但 是, 了 解 一 些 硬 件 差 异 有 助 于 我 们 编 写 设 备 无 关 的 代 码 此 处 我 们 将 讨 论 屏 幕 用 户 输 入 方 法 和 传 感 器 等 1.4.1 屏 幕 液 晶 显 示 屏 (LCD) 和 发 光 二 极 管 (LED) 是 显 示 屏 使 用 的 两 种 技 术 这 两 者 具 体 体 现 在 1 2 3 4 5 6 7 8 9 10 11 12

6 第 1 章 Android 概 述 Android 手 机 上, 就 是 使 用 薄 膜 晶 体 管 (TFT) 的 LCD 显 示 屏 和 使 用 有 源 矩 阵 有 机 发 光 二 极 管 显 示 屏 (AMOLED) TFT 显 示 屏 的 优 势 在 于 使 用 寿 命 较 长, 而 AMOLED 显 示 屏 的 优 势 在 于 没 有 背 光, 因 此, 显 示 的 黑 色 更 深 且 功 耗 较 低 总 的 来 说,Android 设 备 可 按 小 正 常 大 屏 幕 来 分, 也 可 按 低 中 高 像 素 密 度 来 分 请 注 意, 实 际 像 素 密 度 可 能 会 有 所 不 同, 但 肯 定 是 其 中 之 一 表 1-3 总 结 了 目 前 已 有 设 备 的 屏 幕 情 况 请 注 意, 表 1-1 列 出 了 不 同 设 备 的 屏 幕 密 度 类 型 表 1-3 Android 支 持 的 设 备 屏 幕 汇 总 屏 幕 类 型 低 密 度 (~120 ppi), l dpi 中 密 度 (~160 ppi), mdpi 高 密 度 (~240 ppi), hdpi 小 屏 幕 正 常 屏 幕 QVGA(240 320), 2.6 英 寸 到 3.0 英 寸 对 角 线 WQVGA(240 400), 3.2 英 寸 到 3.5 英 寸 对 角 线 FWQVGA(240 432), 3.5 英 寸 到 3.8 英 寸 对 角 线 HVGA(320 480),3.0 英 寸 到 3.5 英 寸 对 角 线 大 屏 幕 WVGA(480 800),4.8 英 寸 到 5.5 英 寸 对 角 线 FWVGA(480 854),5.0 英 寸 到 5.8 英 寸 对 角 线 1.4.2 用 户 输 入 方 式 触 摸 屏 使 用 户 能 够 和 视 觉 显 示 互 动 目 前 有 下 列 三 种 触 摸 屏 技 术 WVGA(480 800),3.3 英 寸 到 4.0 英 寸 对 角 线 FWVGA(480 854),3.5 英 寸 到 4.0 英 寸 对 角 线 电 阻 屏 在 玻 璃 屏 幕 的 顶 部 覆 盖 了 两 层 电 阻 材 料 层 当 手 指 手 写 笔 或 任 何 对 象 下 压 时, 这 两 层 接 触 在 一 起, 触 摸 的 位 置 就 能 被 确 定 电 阻 触 摸 屏 的 性 价 比 高, 但 透 光 率 只 有 75%, 而 且 最 近 才 实 现 多 点 触 摸 电 容 屏 在 玻 璃 屏 幕 上 覆 盖 有 一 个 带 电 材 料 层 当 手 指 或 任 何 导 电 物 体 接 触 该 层, 会 引 起 电 量 的 变 化, 改 变 电 容, 就 可 以 测 量 出 接 触 的 位 置 电 容 式 触 摸 屏 的 透 光 度 高 达 90%, 但 是 其 精 度 要 比 电 阻 屏 差 表 面 声 波 这 里 运 用 了 一 种 更 加 先 进 的 方 法, 发 送 和 接 收 超 声 波 来 定 位 当 手 指 或 任 何 物 体 碰 触 屏 幕 时, 声 波 会 被 吸 收 可 以 测 量 声 波 以 确 定 碰 触 的 位 置 这 是 一 种 最 经 久 耐 用 的 解 决 方 案, 更 适 合 于 大 屏 幕, 如 银 行 的 自 动 柜 员 机 所 有 Android 设 备 均 使 用 电 阻 或 电 容 触 摸 屏 技 术, 并 且 除 了 一 些 早 期 的 设 备 之 外 都 支 持 多 点 触 摸 此 外,Android 的 设 备 还 配 备 了 触 摸 屏 的 替 代 方 法 可 采 用 下 列 方 法 之 一 : D-pad 十 字 键 盘 ( 方 向 键 ) 一 个 有 上 下 左 右 方 向 的 控 制 杆 ; 轨 迹 球 一 种 滚 珠, 类 似 于 鼠 标 的 指 针 设 备 ; 触 控 板 一 种 特 殊 的 长 方 形 表 面, 用 作 指 针 设 备 1.4.3 传 感 器 在 某 种 程 度 上, 智 能 手 机 正 在 成 为 一 个 传 感 器 中 心, 为 用 户 提 供 了 丰 富 的 体 验 麦 克 风 之 后,

1.4 Android 设 备 的 硬 件 差 异 7 在 手 机 上 出 现 的 第 一 个 附 加 传 感 器 就 是 摄 像 头 不 同 手 机 的 摄 像 头 的 性 能 差 异 很 大, 已 经 成 为 影 响 人 们 选 择 手 机 的 一 个 重 要 因 素 现 在 的 附 加 传 感 器 也 存 在 这 种 多 样 性 大 部 分 的 智 能 手 机 至 少 具 有 三 种 基 本 的 传 感 器 : 一 个 三 轴 加 速 度 计, 用 于 测 量 重 力 加 速 度 ; 一 个 三 轴 磁 力 计, 用 来 测 量 周 围 的 磁 场 ; 还 有 一 个 温 度 传 感 器, 用 来 测 量 环 境 温 度 例 如,HTC Dream(G1) 手 机 包 含 下 列 传 感 器 ( 可 通 过 getsensorlist() 方 法 显 示, 将 在 第 7 章 进 一 步 介 绍 ): AK8976A 三 轴 加 速 度 计 AK8976A 三 轴 磁 场 传 感 器 AK8976A 方 向 传 感 器 AK8976A 温 度 传 感 器 AK8976A 是 旭 化 成 微 系 统 公 司 (AKM) 的 元 件, 整 合 了 压 阻 式 加 速 度 计 霍 尔 效 应 磁 强 计 和 温 度 传 感 器 所 有 传 感 器 均 提 供 8 位 精 度 的 数 据 方 向 传 感 器 是 一 个 虚 拟 传 感 器, 结 合 使 用 加 速 度 计 和 磁 强 计 确 定 方 向 相 比 之 下, 摩 托 罗 拉 Droid 手 机 中 包 含 了 以 下 传 感 器 : LIS331DLH 三 轴 加 速 度 计 AK8973 三 轴 磁 场 传 感 器 AK8973 温 度 传 感 器 SFH7743 近 距 离 传 感 器 方 向 传 感 器 LM3530 光 传 感 器 LIS331DLH 是 意 法 半 导 体 公 司 (ST Microelectronics) 生 产 的 12 位 电 容 式 加 速 度 计 它 提 供 了 更 准 确 的 数 据, 并 且 其 采 样 频 率 可 达 1 khz AK8973 是 AKM 封 装 包, 包 含 了 8 位 霍 尔 效 应 磁 强 计 和 温 度 传 感 器 此 外,Droid 还 包 含 两 个 其 他 传 感 器 SFH7743 是 光 电 半 导 体 的 短 距 离 近 场 探 测 器, 用 于 在 物 体 ( 如 耳 朵 ) 贴 近 屏 幕 40 毫 米 距 离 时 关 闭 屏 幕 LM3530 是 美 国 国 家 半 导 体 生 产 的 可 编 程 光 传 感 器, 可 检 测 环 境 光 并 调 节 屏 幕 背 光 和 LED 闪 光 灯 到 适 当 亮 度 配 备 传 感 器 的 Android 设 备 还 有 HTC EVO 4G 手 机, 它 具 有 以 下 传 感 器 : BMA150 三 轴 加 速 度 计 AK8973 三 轴 磁 场 传 感 器 AK8973 方 向 传 感 器 CM3602 近 距 离 传 感 器 CM3602 光 传 感 器 BMA150 是 博 世 传 感 器 公 司 生 产 的 10 位 加 速 计, 可 提 供 高 达 1.5 khz 的 采 样 频 率 CM3602 是 Capella 公 司 生 产 的 短 距 离 近 距 离 传 感 器 和 环 境 光 感 应 器 的 组 合 产 品 总 体 而 言, 不 同 型 号 的 Android 设 备 具 有 不 同 的 底 层 硬 件 这 些 差 异 会 导 致 性 能 和 传 感 器 的 1 2 3 4 5 6 7 8 9 10 11 12

8 第 1 章 Android 概 述 精 度 上 的 差 异 1.5 Android 的 特 点 Android 的 详 细 特 性 和 运 用 方 法 是 贯 穿 全 书 的 主 题 从 更 宽 泛 的 层 面 来 看,Android 的 一 些 主 要 特 点 就 是 其 主 要 卖 点 和 差 异 化 特 点 我 们 最 好 要 清 楚 认 识 到 这 些 要 点, 并 且 尽 可 能 利 用 它 们 1.5.1 多 进 程 和 应 用 程 序 微 件 Android 的 操 作 系 统 不 限 制 处 理 器 在 同 一 时 刻 只 能 执 行 一 个 应 用 程 序 系 统 在 单 个 应 用 程 序 中 管 理 应 用 程 序 和 线 程 的 优 先 级 这 样 做 的 好 处 在 于, 当 用 户 使 用 设 备 运 行 前 台 进 程 时, 后 台 任 务 可 以 同 时 运 行 例 如, 在 用 户 玩 游 戏 时, 后 台 进 程 可 以 查 询 股 票 价 格, 在 必 要 时 触 发 警 告 框 微 件 (Widget) 是 一 类 小 型 应 用 程 序, 可 以 嵌 入 到 其 他 应 用 程 序 中 ( 如 主 屏 幕 ) 它 们 能 够 在 其 他 应 用 程 序 正 在 运 行 时 处 理 事 件, 例 如 启 动 一 个 音 乐 流 媒 体 或 显 示 外 界 温 度 多 进 程 提 供 了 丰 富 的 用 户 体 验 但 是, 必 须 小 心 避 免 费 电 的 应 用 程 序 耗 尽 电 池 多 进 程 的 特 点 将 在 第 3 章 进 一 步 讨 论 1.5.2 触 摸 手 势 和 多 点 触 控 触 摸 屏 是 手 持 设 备 上 的 一 种 直 观 用 户 界 面 如 果 使 用 巧 妙, 许 多 操 作 可 以 无 师 自 通 当 手 指 触 摸 屏 幕 时, 拖 动 和 翻 转 是 用 户 和 图 形 交 互 的 自 然 方 式 多 点 触 控 可 在 同 一 时 间 跟 踪 按 下 的 多 个 手 指, 通 常 是 用 来 缩 放 或 旋 转 视 图 一 些 触 摸 事 件 是 对 开 发 者 透 明 的, 不 需 要 ( 编 程 ) 实 现 其 具 体 的 行 为 可 以 根 据 需 要 自 定 义 手 势 重 要 的 是 触 摸 事 件 的 用 法 要 与 其 他 应 用 程 序 尽 量 保 持 一 致 这 些 触 摸 事 件 将 在 第 5 章 进 一 步 讨 论 1.5.3 硬 键 盘 和 软 键 盘 便 携 的 口 袋 型 设 备 (pocket device) 使 用 户 感 兴 趣 的 一 个 特 点 是, 到 底 是 用 一 个 实 体 ( 也 称 为 硬 ) 键 盘 还 是 软 件 ( 也 称 为 软 ) 键 盘 实 体 键 盘 有 真 实 触 感, 各 键 位 置 明 确, 这 会 让 一 些 人 打 字 更 快, 而 另 一 些 人 则 喜 欢 软 键 盘 输 入 简 洁 明 快 的 设 计 和 用 起 来 方 便 Android 设 备 种 类 繁 多, 这 两 种 类 型 都 可 以 找 到 对 于 开 发 者 而 言, 副 作 用 是 两 者 都 需 要 支 持 软 键 盘 的 缺 点 是 占 用 了 一 部 分 屏 幕 空 间, 专 门 用 于 输 入, 而 开 发 者 需 要 考 虑 到 这 一 点, 在 多 个 用 户 界 面 (UI) 布 局 中 进 行 测 试 1.6 Android 开 发 这 本 书 关 注 的 重 点 是 编 写 Android 代 码, 这 是 Android 开 发 的 主 要 方 面 不 过, 我 们 也 会 适 当 地 讲 解 其 他 方 面 的 开 发 知 识, 包 括 设 计 和 发 布 等 方 面 的 内 容 1.6.1 如 何 使 用 本 书 中 的 秘 诀 一 般 来 说, 本 书 中 的 代 码 秘 诀 是 完 整 的, 包 括 在 Android 设 备 上 运 行 可 用 应 用 程 序 必 需 的 所

1.6 Android 开 发 9 有 信 息 在 第 2 章 会 讲 到, 运 行 应 用 程 序 还 需 要 多 个 用 户 生 成 文 件 甚 至 范 例 中 只 要 有 一 个 文 件 缺 失 就 会 对 那 些 不 熟 悉 Android 设 置 的 用 户 造 成 不 便 因 此, 每 个 秘 诀 都 包 含 必 要 的 文 件, 使 代 码 可 以 正 常 运 行 每 个 代 码 文 件 列 出 时 都 以 完 整 的 文 件 名 作 为 列 表 标 题, 这 有 助 于 找 到 该 文 件 在 Android 工 程 中 的 位 置 同 时, 如 果 一 下 子 给 出 太 多 文 件, 反 而 会 让 人 分 不 清 要 实 现 什 么 功 能 因 此, 本 书 示 例 采 取 了 两 种 稍 微 不 同 于 常 规 应 用 程 序 的 编 码 风 格 代 码 中 不 包 含 太 多 注 释 正 文 会 比 较 详 细 地 解 释 代 码, 而 加 粗 的 代 码 则 表 示 特 殊 的 技 术 要 点 在 日 常 编 程 实 践 中, 程 序 员 应 在 代 码 中 多 写 些 注 释 显 式 声 明 字 符 串, 而 不 使 用 全 局 资 源 把 字 符 串 定 义 为 全 局 资 源 是 个 好 办 法, 将 在 第 4 章 中 详 细 讨 论, 并 配 有 多 个 范 例 但 是 本 书 中, 当 某 个 秘 诀 只 用 到 少 量 字 符 串 时, 则 会 显 式 声 明 字 符 串, 而 不 是 为 定 义 它 们 去 引 入 一 个 额 外 的 文 件 初 学 Andorid 的 人 非 常 适 合 使 用 安 装 了 Android 插 件 的 Eclipse 作 为 Android 开 发 环 境 正 如 第 2 章 中 所 讨 论 的, 这 可 确 保 Android 工 程 设 置 和 环 境 恰 当 配 置,Eclipse 甚 至 增 加 了 图 标 占 位 符 该 工 具 也 有 助 于 执 行 更 高 级 的 任 务, 如 为 发 布 签 名 应 用 程 序 Android 软 件 开 发 工 具 包 (SDK) 中 的 模 拟 器 在 实 际 应 用 过 程 中 很 有 价 值, 如 果 能 在 真 实 的 Android 设 备 上 运 行 应 用 程 序 就 更 好 了 使 用 真 实 设 备 可 以 加 快 开 发 速 度, 提 供 更 真 实 的 测 试 本 书 中 所 有 代 码 示 例 均 已 经 在 运 行 Android 2.1 的 真 实 设 备 上 测 试 过, 并 根 据 需 要, 有 的 还 在 Android 1.5 或 Android 2.2 上 进 行 了 测 试 在 使 用 模 拟 器 时, 某 些 功 能 ( 例 如, 蓝 牙 配 对 或 传 感 器 的 变 化 ) 难 以 模 拟, 对 开 发 者 不 透 明 因 此, 建 议 初 步 测 试 都 在 Android 设 备 上 完 成 1.6.2 好 好 设 计 应 用 程 序 一 个 好 的 应 用 程 序 应 该 是 三 好 生 : 好 创 意, 好 编 码, 好 设 计 通 常 情 况 下, 最 后 一 个 要 素 是 最 容 易 被 忽 略 的, 因 为 大 多 数 开 发 人 员 是 独 立 工 作 的, 他 们 不 是 平 面 设 计 师 谷 歌 肯 定 意 识 到 了 这 一 点, 它 推 出 了 一 系 列 设 计 指 南, 包 括 图 标 设 计 微 件 设 计 activity 及 任 务 设 计 菜 单 设 计 可 通 过 如 下 网 址 访 问 :http://developer.android.com/guide/practices/ui_guidelines/ 好 设 计 这 一 点 应 该 要 再 三 强 调 好 的 设 计 可 以 让 应 用 程 序 独 树 一 帜, 让 用 户 更 容 易 接 受, 并 得 到 用 户 的 认 可 Android Market 上 一 些 最 成 功 的 应 用 程 序 都 是 平 面 设 计 师 和 开 发 者 合 作 的 成 果 程 序 开 发 时 应 该 专 门 安 排 一 大 块 时 间 用 于 考 虑 如 何 做 出 最 佳 设 计 1.6.3 保 持 向 前 兼 容 新 的 Android 版 本 通 常 在 API 层 面 上 让 功 能 渐 进 增 强, 并 向 前 兼 容 事 实 上, 只 有 当 一 个 设 备 通 过 Android API 兼 容 测 试 后 才 可 被 称 为 Android 设 备 然 而, 如 果 应 用 程 序 改 变 了 底 层 系 统, 就 无 法 保 证 其 兼 容 性 为 了 确 保 未 来 Android 更 新 安 装 到 设 备 上 时 符 合 向 前 兼 容 性, 应 该 遵 循 谷 歌 的 下 列 建 议 不 使 用 内 部 API 或 不 受 支 持 的 API 不 在 没 有 与 用 户 交 流 的 情 况 下 直 接 操 作 设 置 未 来 版 本 可 能 出 于 安 全 原 因, 限 制 某 些 设 1 2 3 4 5 6 7 8 9 10 11 12

10 第 1 章 Android 概 述 置 例 如, 曾 经 应 用 程 序 可 自 己 打 开 GPS 或 数 据 漫 游, 但 是 目 前 已 经 不 允 许 了 页 面 布 局 不 走 极 端 虽 然 这 种 情 况 很 罕 见, 但 复 杂 布 局 ( 深 度 超 过 10 或 是 总 数 超 过 30) 就 会 导 致 程 序 崩 溃 不 要 对 硬 件 作 出 错 误 的 估 计 并 非 所 有 Android 设 备 都 有 全 套 支 持 的 硬 件 一 定 要 检 查 所 需 的 硬 件, 如 果 不 存 在, 则 需 要 例 外 处 理 要 保 证 设 备 方 向 不 会 破 坏 应 用 程 序 或 导 致 意 外 的 行 为 可 以 锁 定 屏 幕 方 向, 如 第 2 章 所 述 请 注 意,Android 不 保 证 向 后 兼 容 性 第 2 章 讲 到, 最 好 是 声 明 最 低 的 SDK 版 本, 使 得 设 备 可 以 载 入 适 当 的 兼 容 性 设 置 如 何 在 旧 程 序 上 使 用 新 特 性 也 将 在 本 书 多 处 进 行 讨 论 1.6.4 健 壮 性 和 兼 容 性 支 持 一 样, 应 用 程 序 的 设 计 和 测 试 也 应 该 考 虑 到 程 序 的 健 壮 性 以 下 是 一 些 可 以 帮 助 确 保 健 壮 性 的 提 示 优 先 使 用 Android 库, 然 后 才 是 Java 库 Android 库 专 为 嵌 入 式 设 备 打 造, 并 涵 盖 了 应 用 程 序 需 要 的 多 种 需 求 在 其 他 情 况 下 可 以 使 用 Java 库 但 是, 在 两 者 都 可 用 的 情 况 下, 最 好 使 用 Android 库 注 意 内 存 分 配 要 初 始 化 变 量 尽 量 重 用 对 象, 而 不 是 重 新 分 配 这 样 可 以 加 快 应 用 程 序 执 行 速 度, 避 免 过 度 使 用 垃 圾 收 集 功 能 可 使 用 Dalvik 调 试 监 视 器 服 务 器 (DDMS) 工 具 跟 踪 内 存 分 配, 这 将 在 第 12 章 进 一 步 讨 论 利 用 LogCat 工 具 调 试 和 检 查 警 告 或 错 误, 这 也 将 在 第 12 章 讨 论 测 试 要 彻 底, 如 果 可 能 的 话 在 不 同 的 环 境 和 设 备 上 测 试 1.7 软 件 开 发 工 具 包 Android SDK 由 开 发 Android 应 用 程 序 需 要 的 平 台 工 具 示 例 代 码 以 及 开 发 文 档 所 组 成 它 作 为 Java 开 发 包 (JDK) 的 附 加 内 容 构 建, 而 且 有 一 个 可 以 集 成 到 Eclipse 集 成 开 发 环 境 中 的 插 件 1.7.1 安 装 与 更 新 网 上 有 很 多 文 章 详 细 介 绍 如 何 一 步 一 步 地 安 装 Android SDK 例 如, 在 谷 歌 站 点 http://developer.android.com/sdk/ 上 可 以 找 到 所 有 安 装 过 程 的 相 关 链 接 因 此, 在 此 我 们 仅 对 最 常 见 的 安 装 步 骤 作 一 般 概 要 介 绍 以 供 参 考 这 些 步 骤 应 该 在 作 为 开 发 环 境 的 主 机 上 完 成 (1) 安 装 Java 开 发 包 ( 例 如 安 装 JDK 6.0, 它 用 于 Android 2.1 或 者 以 上 版 本 JDK 5.0 是 Android 开 发 要 求 的 最 低 Java 版 本 ) (2) 安 装 Eclipse Classic( 例 如,Eclipse 3.5.2) 在 Windows 操 作 系 统 下, 只 需 要 解 压 下 载 包 到 某 路 径 就 可 使 用 (3) 安 装 Android SDK( 例 如,r06 版 本 ) 在 Windows 操 作 系 统 下, 只 需 要 解 压 下 载 包 到 某 路 径 就 可 使 用 (4) 启 动 Eclipse 开 发 工 具, 单 击 Help, 再 选 择 Install New Software, 然 后 键 入 URL 地 址 https://dl-ssl.google.com/android/eclipse/, 安 装 Android DDMS 和 Android 开 发 工 具 (ADT)

1.7 软 件 开 发 工 具 包 11 (5) 在 Eclipse 中, 选 择 Window Preferences ( 在 Mac 系 统 上, 选 择 Eclipse Preferences), 再 选 择 Android, 然 后 点 击 Browse 按 钮 选 择 Android SDK 的 安 装 路 径 (6) 在 Eclipse 中, 依 次 选 择 Window Android SDK and AVD Manager Available Packages, 选 择 安 装 必 要 的 API( 例 如 Documentation for Android SDK,API 8;SDK Platform Android 2.2, API 8;Google APIs bygoogle Inc. 以 及 Android API 8) (7) 同 样 从 Android SDK and AVD Manager 菜 单 中, 创 建 一 个 Android 虚 拟 设 备 来 运 行 模 拟 器 或 者 安 装 USB 驱 动 程 序 在 真 机 中 运 行 应 用 (8) 在 Eclipse 开 发 工 具 中, 依 次 选 择 Run Run Configurations 来 为 每 一 个 Android 应 用 创 建 新 的 运 行 设 置 ( 与 Debug Configuration 的 设 置 类 似 ) Android JUnit 测 试 也 可 以 在 此 处 配 置 至 此, 开 发 环 境 基 本 配 置 完 成, 我 们 就 可 以 轻 松 地 开 发 一 个 Android 应 用 并 且 在 模 拟 器 或 者 真 实 Android 设 备 中 运 行 测 试 我 们 可 以 通 过 在 Eclipse 开 发 环 境 中 选 择 Help Software Updates, 再 选 择 适 当 版 本, 就 可 以 更 新 SDK 到 新 版 本 1.7.2 软 件 特 性 和 API 级 别 Android 操 作 系 统 会 定 期 推 出 新 功 能 和 增 强 特 性, 例 如 提 高 效 率 修 正 bug 等 操 作 系 统 更 新 的 一 个 最 主 要 推 动 力 是 新 设 备 硬 件 能 力 的 提 升 事 实 上, 很 多 操 作 系 统 版 本 都 是 伴 随 着 新 硬 件 设 备 的 推 出 而 发 布 的 ( 例 如 Éclair 随 着 设 备 Droid 推 出 而 发 布 ) 某 些 旧 有 的 Android 设 备 不 符 合 新 版 本 系 统 的 硬 件 要 求, 因 此 不 能 随 着 新 操 作 系 统 的 发 布 而 更 新 系 统 这 就 慢 慢 形 成 了 使 用 不 同 Android 系 统 版 本 的 用 户 群 所 以 开 发 者 需 要 检 查 用 户 硬 件 性 能, 或 者 至 少 提 示 用 户 设 备 所 需 要 的 最 低 硬 件 特 性 该 任 务 可 以 通 过 检 测 一 个 数 值, 即 API 级 别 来 实 现 以 下 是 从 开 发 者 的 角 度 总 结 的 不 同 操 作 系 统 版 本 的 发 布 及 主 要 特 征 代 号 Cupcake: Android OS 1.5,API level 3,2009 年 4 月 30 日 发 布 Linux 内 核 2.6.27 智 能 虚 拟 ( 软 ) 键 盘, 支 持 第 三 方 键 盘 AppWidget 框 架 Live 文 件 夹 Raw 格 式 的 音 频 录 制 和 播 放 交 互 式 MIDI 播 放 引 擎 视 频 录 制 API 支 持 立 体 声 蓝 牙 去 除 最 终 用 户 的 根 目 录 访 问 权 限 ( 除 非 连 接 到 电 脑 并 使 用 SDK) 通 过 RecognizerIntent( 云 服 务 ) 进 行 语 音 识 别 快 速 GPS 定 位 ( 使 用 AGPS) 代 号 Donut: Android OS 1.6,API Level 4,2009 年 9 月 15 日 发 布 Linux 内 核 2.6.29 1 2 3 4 5 6 7 8 9 10 11 12

12 第 1 章 Android 概 述 支 持 多 种 屏 幕 尺 寸 手 势 API Text-to-speech 文 本 语 音 朗 读 功 能 引 擎 通 过 SearchManager 整 合 快 速 搜 索 框 虚 拟 专 用 网 支 持 代 号 Eclair: Android OS 2.0, API Level 5,2009 年 10 月 26 日 发 布 ; Android OS 2.0.1,API Level 6,2009 年 12 月 3 日 发 布 ; Android OS 2.1,API Level 7,2010 年 1 月 12 日 发 布 同 步 适 配 器 API, 用 于 连 接 到 任 何 后 端 在 应 用 程 序 中 嵌 入 快 速 联 系 人 应 用 程 序 可 以 控 制 设 备 蓝 牙 连 接 HTML 5 支 持 Microsoft Exchange 支 持 通 过 MotionEvent 类 实 现 多 点 触 控 支 持 动 态 壁 纸 代 号 FroYo: Android OS 2.2,API Level 8,2010 年 5 月 20 日 发 布 Linux 内 核 2.6.32 支 持 即 时 编 译 (JIT), 使 代 码 执 行 速 度 更 快 通 过 蓝 牙 进 行 语 音 拨 号 支 持 车 载 和 桌 面 底 座 模 式 更 好 定 义 的 多 点 触 摸 事 件 云 端 到 设 备 API 应 用 可 安 装 到 设 备 的 SD 记 忆 卡 中 在 选 定 设 备 支 持 Wi-Fi 连 接 功 能 支 持 视 频 和 图 片 的 缩 略 图 显 示 支 持 多 语 言 的 键 盘 输 入 为 Market 提 供 应 用 程 序 错 误 报 告 Android 正 逐 渐 走 向 成 熟, 新 版 本 发 布 的 频 率 不 再 那 么 快 了 虽 然 无 线 远 程 更 新 操 作 系 统 是 有 可 能 的, 但 是 逻 辑 上 过 于 复 杂, 运 营 商 尽 量 避 免 这 种 方 法 硬 件 制 造 商 也 更 愿 意 有 一 个 稳 定 的 版 本, 这 样 他 们 就 不 必 对 库 存 手 机 进 行 频 繁 刷 新 了 然 而, 对 于 开 发 者 来 说, 当 有 新 版 本 发 布 时, 它 所 带 的 新 功 能 还 是 值 得 去 探 索 和 使 用 1.7.3 利 用 模 拟 器 或 真 机 调 试 程 序 在 用 于 开 发 的 计 算 机 上, 模 拟 器 会 启 动 一 个 看 似 Android 手 机 的 窗 口, 执 行 真 实 的 ARM 指 令 需 要 注 意 的 是, 即 使 在 高 配 置 计 算 机 上, 模 拟 器 初 始 化 的 过 程 也 会 很 慢 尽 管 有 很 多 方 法 可 配 置 模 拟 器 模 拟 真 机 的 多 个 方 面, 例 如 电 话 呼 入 有 限 的 数 据 传 输 率 改 变 屏 幕 方 向 等, 但 还 是 有 很

1.7 软 件 开 发 工 具 包 13 多 特 性 ( 例 如 感 应 器 和 音 频 / 视 频 ) 是 无 法 通 过 模 拟 器 来 实 现 的 对 于 没 有 设 备 的 开 发 人 员 来 说, 可 以 把 模 拟 器 视 为 一 种 验 证 设 备 基 本 功 能 的 有 效 方 法 例 如, 可 以 用 来 测 试 平 板 电 脑 的 屏 幕 尺 寸 而 不 用 去 购 买 一 个 真 的 平 板 电 脑 注 意, 我 们 必 须 创 建 一 个 目 标 虚 拟 设 备, 以 正 确 启 动 模 拟 器 Eclipse 开 发 工 具 提 供 了 一 个 很 好 的 方 法 来 管 理 Android 虚 拟 设 备 (AVD) 模 拟 器 常 用 功 能 对 应 的 快 捷 键 如 表 1-4 所 示 表 1-4 Android OS 模 拟 器 控 制 键 模 拟 器 功 能 Escape 后 退 Home 主 页 F2, PageUp 菜 单 Shift-F2, PageDown 开 始 F3 呼 叫 / 拨 号 F4 挂 断 / 结 束 呼 叫 F5 搜 索 F7 电 源 按 键 Ctrl-F3, Ctrl-KEYPAD_5 摄 像 头 Ctrl-F5, KEYPAD_PLUS 音 量 增 Ctrl-F6, KEYPAD_MINUS 音 量 减 KEYPAD_5 方 向 键 中 的 确 定 键 KEYPAD_4, KEYPAD_6 方 向 键 左, 方 向 键 右 KEYPAD_8, KEYPAD_2 方 向 键 上, 方 向 键 下 F8 启 用 / 关 闭 蜂 窝 网 络 F9 切 换 代 码 分 析 ( 仅 当 -trace 标 记 时 有 效 ) Alt-ENTER 切 换 到 全 屏 模 式 Ctrl-T 切 换 到 轨 迹 球 模 式 Ctrl-F11, KEYPAD_7 旋 转 屏 幕 方 向 到 下 一 个 布 局 或 上 一 个 布 局 Ctrl-F12, KEYPAD_9 一 般 来 说, 初 次 测 试 最 好 使 用 Android 手 机 这 样 可 以 确 保 功 能 的 完 整 性, 并 获 得 模 拟 器 不 能 完 全 模 拟 的 真 实 感 受 要 把 一 部 Android 手 机 作 为 开 发 平 台 使 用, 只 需 将 它 连 接 到 USB 接 口 并 确 保 USB 驱 动 可 以 被 检 测 ( 在 MAC 系 统 中 这 个 过 程 可 以 自 动 完 成, 在 Windows 系 统 中 驱 动 在 SDK 中,Linux 系 统 请 查 看 Google 相 应 页 面 ) 为 了 能 够 支 持 开 发 调 试,Android 设 备 需 要 更 改 一 些 设 置 从 主 页, 依 次 选 择 MENU Settings Applications Unknown sources 和 MENU Settings Applications Development USB debugging, 确 保 应 用 可 以 通 过 USB 线 安 装 到 设 备 上 更 多 的 Android 调 试 细 节 见 第 12 章 1 2 3 4 5 6 7 8 9 10 11 1.7.4 使 用 Android 调 试 桥 通 常 我 们 可 以 方 便 地 使 用 命 令 行 访 问 Android 设 备 只 要 设 备 通 过 USB 线 连 接 到 计 算 机 上 就 12

14 第 1 章 Android 概 述 可 以 做 到 SDK 中 自 带 了 Android 调 试 桥 (Debug Bridge), 能 用 于 访 问 Android 设 备 例 如 像 使 用 Linux 计 算 机 一 样 登 录 到 Android 设 备, 键 入 如 下 命 令 : 这 时, 许 多 UNIX 命 令 都 可 用 了 使 用 exit 可 以 退 出 shell 只 要 加 上 一 个 命 令 就 可 以 执 行, 而 不 需 要 先 进 入 或 者 退 出 shell: 要 从 设 备 中 复 制 文 件, 可 使 用 pull 命 令, 如 果 需 要 可 以 重 命 名 : 要 复 制 一 份 文 件 到 设 备 中, 可 使 用 push: 要 删 除 应 用, 例 如 从 设 备 中 删 除 com.dummy.game, 可 键 入 如 下 命 令 : 以 上 命 令 是 最 常 用 的, 另 外 还 有 很 多 其 他 可 用 的 命 令, 我 们 将 在 第 12 章 介 绍 这 些 命 令 的 用 法 1.7.5 签 名 和 发 布 应 用 要 在 Android Market 上 发 布 应 用, 必 须 对 它 进 行 签 名 完 成 签 名 需 要 生 成 一 个 密 钥 并 把 它 放 在 一 个 安 全 的 地 方, 然 后 在 发 布 模 式 下 将 应 用 程 序 打 包, 并 用 生 成 的 密 钥 对 其 进 行 签 名 当 应 用 更 新 时, 必 须 使 用 相 同 的 密 钥 对 其 签 名 以 确 保 升 级 过 程 对 用 户 是 透 明 的 Eclipse 开 发 环 境 可 以 自 动 为 我 们 完 成 以 上 工 作 只 需 在 要 签 名 的 工 程 上 单 击 右 键 选 择 Export Export Android Application, 即 可 开 始 打 包 工 作 可 以 利 用 密 码 生 成 密 钥, 密 钥 需 要 保 存 起 来 以 便 将 来 的 应 用 和 应 用 更 新 使 用, 然 后 通 过 菜 单 继 续 完 成 APK 文 件 的 创 建 它 是 一 个 发 布 模 式 的 Android 工 程 并 用 密 钥 签 名 的 封 包 现 在 我 们 就 可 以 将 应 用 程 序 上 传 到 Android Market 上 了 1.8 Android Market 完 成 设 计 开 发 测 试 和 签 名 工 作 后, 你 就 可 以 在 Android Market 发 布 应 用 程 序 然 而 若 想 使 用 谷 歌 的 Android Market, 你 还 需 要 申 请 一 个 Google Checkout 账 号 该 账 号 不 仅 用 来 支 付 25 美 元 的 注 册 费, 也 供 开 发 人 员 收 取 付 费 应 用 的 报 酬 开 发 者 的 作 品 能 够 公 之 于 众, 在 上 传 后 的 短 短 数 小 时 内, 让 全 世 界 的 人 们 浏 览 下 载 评 分 和 评 价, 是 多 么 激 动 人 心 的 事 啊! 下 面 列 出 几 条 应 用 程 序 发 布 建 议 供 你 参 考 1.8.1 最 终 用 户 许 可 协 议 在 全 球 大 部 分 地 区, 任 何 形 式 的 原 创 内 容 的 发 布 均 受 伯 尔 尼 公 约 1 的 自 动 版 权 保 护 但 通 常 还 是 会 为 内 容 添 加 附 有 出 版 时 间 的 版 权 声 明, 如 2010 我 们 会 在 第 4 章 中 讨 论 如 何 为 Android 1 伯 尔 尼 公 约 (Berne Convention), 有 关 保 护 文 字 和 艺 术 作 品 版 权 的 国 际 公 约 译 者 注

1.8 Android Market 15 应 用 程 序 添 加 版 权 声 明 最 终 用 户 许 可 协 议 (EULA) 是 开 发 者 ( 或 开 发 商 ) 与 顾 客 ( 或 最 终 用 户 ) 签 署 的 发 布 程 序 的 软 件 合 同, 我 们 可 以 利 用 EULA 进 一 步 维 护 开 发 者 ( 或 开 发 商 ) 的 权 益 通 常 EULA 声 明 包 括 诸 如 授 权 许 可 证 版 权 和 免 责 条 款 等 具 体 权 责 内 容 所 以 应 用 程 序 特 别 是 付 费 应 用 最 好 还 是 附 上 EULA 我 们 将 会 在 第 9 章 讨 论 如 何 为 Android 应 用 添 加 EULA 1.8.2 提 升 应 用 程 序 的 曝 光 率 用 户 通 常 使 用 以 下 三 种 方 式 查 找 应 用 程 序, 充 分 利 用 这 些 渠 道 有 助 于 打 响 应 用 程 序 知 名 度 第 一 种 方 式, 通 过 选 择 列 出 最 新 应 用 ( just in apps) 查 看 应 用 程 序 首 先 要 为 你 的 应 用 程 序 选 择 恰 当 的 描 述 性 名 称 和 所 属 类 别, 如 游 戏 通 信 软 件 等 为 吸 引 人 们 的 注 意, 用 语 一 定 要 简 洁 明 了 游 戏 大 类 下 又 分 很 多 子 类 如 果 你 的 应 用 程 序 非 常 好 玩, 但 又 没 有 明 确 的 用 途 或 者 等 级 评 分, 不 妨 将 其 归 入 休 闲 游 戏 系 列 即 便 如 此,Android Market 每 月 都 会 有 10 000 多 款 应 用 程 序 上 架, 上 传 的 应 用 往 往 一 两 天 后 就 被 挤 下 了 最 新 应 用 名 单 第 二 种 方 式, 通 过 关 键 字 检 索 查 找 应 用 程 序 我 们 可 以 推 测 用 户 可 能 使 用 哪 些 主 要 的 关 键 字, 然 后 将 其 加 到 程 序 的 标 题 或 描 述 中 世 界 各 地 用 户 语 言 不 同, 所 以 应 包 含 适 当 的 国 际 关 键 字 第 三 种 方 式, 通 过 选 择 热 门 程 序 排 行 (Top apps) 发 现 应 用 程 序 这 个 排 序 由 评 分 和 下 载 次 数 决 定 若 想 在 此 类 目 跻 身 前 列, 开 发 人 员 就 要 耗 费 时 间 和 精 力 不 断 更 新 和 完 善 应 用 这 就 引 出 了 提 高 程 序 知 名 度 的 最 后 一 点, 即 健 壮 性 原 则 要 确 保 你 的 程 序 不 会 含 有 致 命 性 bug, 耗 电 量 小 卸 载 方 式 直 观 明 了, 否 则, 如 果 有 太 过 耗 电 无 法 卸 载 等 类 似 评 语 就 很 容 易 吓 跑 潜 在 客 户 值 得 注 意 的 是, 开 发 者 与 用 户 之 间 的 交 互 几 乎 全 部 发 生 在 Android Market, 人 们 通 常 不 会 通 过 发 布 者 的 联 系 方 式 和 支 持 网 站 去 找 详 细 资 料, 因 此 这 部 分 信 息 略 显 多 余 1.8.3 脱 颖 而 出 有 时 开 发 者 创 建 某 个 应 用 程 序 之 后, 突 然 发 现 Android Market 已 经 发 布 了 类 似 软 件 我 们 应 该 把 它 看 作 是 一 个 机 遇 而 非 挫 折 优 良 的 设 计 界 面 和 运 行 状 况 能 快 速 赚 取 用 户 口 碑, 从 而 令 我 们 的 应 用 程 序 脱 颖 而 出 通 常 来 说, 原 创 是 最 好 的, 但 我 们 也 没 必 要 排 斥 学 习 和 模 仿, 只 要 注 意 不 侵 犯 版 权 即 可 1.8.4 为 应 用 程 序 收 费 应 用 程 序 在 Android Market 正 式 上 架 或 者 上 传 更 新 的 时 候, 开 发 者 需 要 决 定 是 否 对 其 收 费, 主 要 有 以 下 5 种 方 式 完 全 免 费 所 有 具 有 访 问 权 限 的 人 都 可 以 在 Android Market 中 查 看 和 安 装 此 应 用 载 有 广 告 的 免 费 应 用 有 时 开 发 者 需 要 为 应 用 程 序 拉 赞 助, 更 多 的 时 候 是 和 第 三 方 集 成 商 合 作 广 告 商 通 过 广 告 点 击 率 付 钱, 而 较 少 凭 广 告 印 象 付 费 图 1-1 即 为 一 条 AdMob 的 横 幅 广 告 该 类 广 告 要 求 应 用 程 序 需 具 有 访 问 Internet 和 设 备 所 处 地 点 的 权 限 建 议 使 用 低 精 度 定 位 而 不 是 精 确 定 位, 以 免 吓 跑 一 些 潜 在 客 户, 拒 绝 安 装 你 的 应 用 1 2 3 4 5 6 7 8 9 10 11 12

16 第 1 章 Android 概 述 完 全 付 费 Google 帮 助 管 理 资 费, 并 抽 取 三 成 收 益 没 有 开 通 Google Checkout 服 务 的 国 家 或 地 区 的 用 户 无 法 查 看 和 安 装 此 类 应 用 因 此, 部 分 开 发 者 随 即 转 向 第 三 方 应 用 商 店 发 售 此 类 应 用 程 序 同 时 发 布 免 费 限 制 版 和 付 费 完 整 版 两 种 应 用 这 样 就 可 以 试 用 该 款 应 用 程 序, 如 果 喜 欢, 用 户 购 买 完 整 版 时 就 不 会 太 犹 豫 某 些 应 用 ( 如 10 级 闯 关 游 戏 ) 非 常 适 合 采 用 此 种 模 式 推 广, 但 并 不 是 所 有 程 序 均 适 用 售 卖 虚 拟 商 品 这 是 Facebook 的 应 用 采 用 的 重 要 模 式, 备 受 移 动 社 区 关 注 图 1-1 AdMob 的 横 幅 广 告 案 例 免 费 应 用 程 序 往 往 会 有 很 多 人 浏 览 再 晦 涩 和 古 怪 的 新 应 用 上 市 的 时 候, 头 一 个 月 也 至 少 会 有 1000 人 浏 览 和 下 载 试 用 有 些 开 发 者 明 确 声 明 本 程 序 毫 无 用 处, 结 果 应 用 的 下 载 量 也 能 达 到 10 000 以 上 并 获 得 四 星 级 评 价 有 点 儿 用 的 一 些 免 费 应 用 下 载 量 可 以 达 到 50 000, 功 能 非 常 实 用 的 应 用 程 序 下 载 量 甚 至 可 能 超 过 100 000 对 于 大 多 数 开 发 者 来 说, 如 此 大 的 曝 光 率 着 实 令 人 印 象 深 刻 目 前 移 动 广 告 仍 然 处 于 起 步 阶 段, 吸 引 力 不 足, 所 以 广 告 点 击 率 并 不 理 想 现 在 Market 中 运 营 最 好 的 还 是 付 费 应 用, 只 要 程 序 功 能 实 用, 描 述 清 晰, 有 不 少 正 面 评 论, 人 们 就 会 购 买 它 如 果 应 用 程 序 非 常 成 功, 那 么 价 格 贵 点 也 无 可 厚 非 1.8.5 管 理 评 论 和 更 新 很 多 应 用 程 序 都 是 开 发 者 发 布 程 序 之 后, 再 根 据 用 户 的 反 馈 意 见 不 断 升 级 完 善 应 用, 从 而 大 获 成 功 的 用 户 喜 欢 看 到 开 发 者 回 应 评 论, 这 会 引 导 越 来 越 多 的 人 下 载 该 应 用, 随 着 下 载 量 的 攀 升, 应 用 程 序 也 更 加 受 认 可 一 般 来 说, 每 200 个 用 户 中 会 有 1 人 评 分, 发 表 评 论 的 人 就 更 少 了 如 果 用 户 肯 花 时 间 评 价 你 的 程 序, 这 些 意 见 多 半 值 得 一 听, 尤 其 是 一 些 建 设 性 评 论, 比 如 在 HTC Hero 型 号 手 机 上 不 能

1.8 Android Market 17 正 常 运 行 或 者 非 常 不 错 的 程 序, 若 是 怎 么 怎 么 做 就 更 好 了 之 类 开 发 者 能 够 根 据 已 有 用 户 的 反 馈 意 见 积 极 升 级 应 用 程 序, 会 让 大 家 看 在 眼 里, 从 而 吸 引 更 多 用 户 任 何 情 况 下, 开 发 者 都 要 明 确 强 调 软 件 的 升 级 原 因 要 知 道 很 多 用 户 一 天 能 收 到 十 几 条 应 用 程 序 的 更 新 通 知, 如 果 没 有 一 个 很 好 的 升 级 理 由, 他 们 很 可 能 就 不 更 新 了 1.8.6 Android Market 的 候 补 之 选 除 Android Market 之 外 还 有 一 些 独 立 的 Android 应 用 程 序 商 店 虽 然 这 些 应 用 程 序 商 店 不 像 Google Market 那 样 访 问 便 捷, 但 有 诸 如 曝 光 率 高 收 费 条 目 多 不 收 取 提 成 费 用 等 优 点 同 时 还 有 些 Android 设 备 制 造 商 为 其 终 端 开 发 了 定 制 的 应 用 程 序 商 店 例 如, 我 们 可 以 通 过 摩 托 罗 拉 应 用 商 店 使 中 国 和 拉 丁 美 洲 的 摩 托 罗 拉 Android 手 机 能 看 到 我 们 的 应 用, 该 应 用 商 店 的 网 站 为 http://developer.motorola.com/shop4apps 1 2 3 4 5 6 7 8 9 10 11 12

18 第 2 章 应 用 程 序 基 础 知 识 :Activity 和 Intent 第 2 章 应 用 程 序 基 础 知 识 : activity 和 intent 每 个 Android 应 用 程 序 在 开 发 时 都 是 一 个 独 立 的 Android 工 程 本 章 介 绍 了 Android 工 程 目 录 结 构, 并 简 要 概 述 程 序 的 基 本 组 成 模 块, 这 些 内 容 为 理 解 本 书 的 秘 诀 提 供 了 非 常 有 用 的 背 景 知 识 本 章 的 后 半 部 分 将 着 重 讲 解 activitiy 以 及 触 发 这 些 activity 的 intent 2.1 Android 应 用 程 序 预 览 Android 应 用 程 序 可 以 包 含 五 花 八 门 的 功 能, 比 如 编 辑 文 本 播 放 音 乐 设 定 闹 钟 还 有 开 启 通 讯 录 等 这 些 功 能 可 以 划 分 为 以 下 四 类 Android 组 件 ( 见 表 2-1), 每 个 组 件 都 归 属 于 一 个 Java 基 础 类 表 2-1 Android 应 用 程 序 所 包 含 的 四 种 组 件 功 能 Java 基 础 类 范 例 关 注 用 户 操 作 Activity 编 辑 文 本, 玩 游 戏 后 台 进 程 Service 播 放 音 乐, 更 新 天 气 图 标 接 收 消 息 BroadcastReceiver 根 据 特 定 事 件 触 发 警 报 存 取 数 据 ContentProvider 开 启 手 机 通 讯 录 每 个 Android 应 用 都 由 一 个 或 多 个 组 件 组 成 当 要 用 到 某 个 组 件 的 时 候,Android 操 作 系 统 就 会 将 它 们 实 例 化 在 拥 有 特 定 权 限 的 情 况 下, 其 他 应 用 程 序 同 样 也 可 以 使 用 它 们 Android 操 作 系 统 集 成 了 很 多 功 能 ( 某 些 功 能 甚 至 并 非 和 某 个 应 用 程 序 直 接 相 关, 如 呼 入 电 话 ), 每 个 组 件 都 具 有 以 下 生 命 周 期, 包 括 创 建 (create) 获 得 焦 点 (focus) 失 去 焦 点 (defocus) 和 销 毁 (destroy) 我 们 可 以 通 过 改 写 程 序 默 认 的 行 为, 使 交 互 对 用 户 更 加 友 好, 比 如 保 存 变 量 或 者 恢 复 用 户 界 面 元 素 除 了 ContentProvider 组 件, 每 个 组 件 都 需 要 一 个 叫 做 Intent 的 异 步 消 息 来 激 活 Intent 可 包 含 一 组 (Bundle) 描 述 该 组 件 的 辅 助 数 据 这 也 提 供 了 一 种 在 组 件 之 间 传 递 消 息 的 方 法 本 章 最 后 将 会 使 用 最 常 见 的 组 件 Activity 来 演 示 前 面 提 到 的 概 念 由 于 activity 总 是 和 具 体

2.1 Android 应 用 程 序 预 览 19 的 用 户 交 互 相 关, 所 以 每 个 activity 在 创 建 的 时 候 会 自 动 创 建 一 个 新 窗 口 当 然 还 会 提 到 一 些 关 于 UI 的 概 要 介 绍 至 于 Service 和 BroadcastReceiver 这 两 个 组 件 我 们 将 会 在 第 3 章 讲 解, 而 ContentProvider 则 会 在 第 9 章 阐 述 2.1.1 秘 诀 1: 创 建 工 程 并 新 建 activity 创 建 Android 工 程 或 者 组 件 最 简 单 的 方 法 莫 过 于 使 用 Eclipse 提 供 的 集 成 开 发 环 境 (IDE), 该 方 法 能 够 确 保 正 确 安 装 辅 助 文 件 创 建 Android 工 程 的 具 体 过 程 如 下 所 示 (1) 在 Eclipse 中, 选 择 File New Android Project 然 后 就 会 显 示 Android 工 程 的 创 建 画 面 (2) 填 写 工 程 名 称 (Project name), 此 处 输 入 SimpleActivityExample (3) 在 Build Target 选 项 框 中 选 择 编 译 目 标, 这 些 选 项 与 开 发 电 脑 的 SDK 版 本 有 关 (4) 填 写 程 序 名 称 (Application name), 此 处 为 Example of Basic Activity (5) 填 写 应 用 程 序 包 名 称 (Package name), 此 处 为 com.cookbook.simple_activity (6) 根 据 同 样 的 步 骤 创 建 主 activity, 注 意 一 定 要 勾 选 Create Activity, 并 填 写 activity 名 称, 此 处 为 SimpleActivity 所 有 的 activity 都 继 承 于 抽 象 类 Activity 或 者 其 子 类, 并 通 过 oncreate() 方 法 创 建 activity 通 常 在 初 始 化 的 时 候 都 会 重 载 该 方 法, 比 如 设 置 UI 创 建 监 听 按 钮 初 始 化 参 数 或 者 开 启 线 程 等 如 果 在 创 建 工 程 时 没 有 创 建 主 activity, 或 者 需 要 添 加 其 他 activity, 可 以 通 过 以 下 步 骤 来 创 建 activity (1) 首 先 创 建 一 个 新 类 扩 展 Activity 类 ( 在 Eclipse 中, 右 键 单 击 project, 选 择 New Class, 然 后 指 定 android.app.activity 作 为 父 类 ) (2) 重 载 oncreate() 功 能 ( 在 Eclipse 中, 右 键 单 击 class 文 件, 选 择 Source Override/ Implement Methods..., 然 后 勾 选 oncreate() 方 法 ) (3) 作 为 最 常 被 重 载 的 方 法 之 一,activity 也 必 须 激 活 父 类 方 法, 否 则 运 行 时 可 能 会 抛 出 异 常 如 清 单 2-1 所 示 首 先 调 用 super.oncreate() 方 法, 确 保 正 确 初 始 化 activity 1 2 3 4 5 6 7 8 清 单 2-1 src/com/cookbook/simple_activity/simpleactivity.java 9 10 11 (4) 如 果 使 用 UI, 则 要 在 res/layout/ 目 录 下 的 一 个 XML 文 件 中 指 定 页 面 布 局 此 处 为 main.xml, 12

20 第 2 章 应 用 程 序 基 础 知 识 :Activity 和 Intent 如 清 单 2-2 所 示 清 单 2-2 res/layout/main.xml (5) 通 过 setcontentview() 方 法 设 置 activity 的 布 局, 并 将 XML 布 局 文 件 作 为 resource ID 传 递 给 它 此 处 为 R.layout.main, 见 清 单 2-1 (6) 在 AndroidManifest XML 文 件 中 声 明 activity 的 属 性, 详 细 内 容 见 清 单 2-5 注 意 字 符 串 类 型 的 资 源 要 在 res/values/ 文 件 夹 下 的 strings.xml 文 件 中 定 义, 如 清 单 2-3 所 示 所 有 字 符 串 都 集 中 于 此 处 定 义, 可 以 方 便 修 改 或 重 用 清 单 2-3 res/values/strings.xml 现 在 我 们 进 一 步 探 讨 该 工 程 的 目 录 结 构 和 自 动 生 成 内 容 2.1.2 工 程 目 录 结 构 及 自 动 生 成 内 容 图 2-1 为 Eclipse Package Explorer 显 示 的 一 个 工 程 结 构 示 例 除 Android 2.0 库 文 件 以 外, 该 工 程 的 目 录 结 构 中 的 文 件 既 有 用 户 创 建 的 也 有 系 统 自 动 生 成 的 用 户 创 建 的 文 件 如 下 所 示 src/ 是 开 发 者 自 己 编 写 的 或 者 导 入 的 Java 包 每 个 包 可 以 包 含 多 个 不 同 的.java 类 文 件 res/layout/ 用 来 存 放 说 明 每 个 界 面 布 局 的 XML 文 件 res/values/ 用 来 存 放 被 其 他 文 件 所 引 用 的 XML 格 式 的 资 源 文 件 res/drawable-hdpi/ res/drawable-mdpi/ 和 res/drawable-ldpi/ 是 程 序 所 使 用 图 片 的 资 源 目 录, 分 别 存 放 高 中 低 不 图 2-1 Eclipse IDE 显 示 的 一 个 Android 工 程 的 目 录 结 构

2.1 Android 应 用 程 序 预 览 21 同 dpi 分 辨 率 的 图 片 assets/ 存 放 程 序 使 用 的 nonmedia 文 件 AndroidManifest.xml 向 Android 操 作 系 统 说 明 该 工 程 自 动 生 成 的 文 件 如 下 所 示 gen/ 存 放 系 统 自 动 生 成 代 码, 包 括 生 成 的 R.java 类 default.properties 存 放 工 程 环 境 信 息 尽 管 该 文 件 由 系 统 自 动 生 成 的, 但 开 发 人 员 也 可 以 根 据 需 要 修 改 应 用 程 序 的 资 源 包 括 描 述 布 局 的 XML 文 件, 描 述 字 符 串 值 UI 元 素 标 签 的 XML 文 件, 以 及 其 他 如 图 片 声 音 等 辅 助 文 件 编 译 时, 对 资 源 的 引 用 都 会 添 加 到 自 动 生 成 的 包 装 类 R.java 中 该 文 件 由 AndroidAsset 打 包 工 具 (aapt) 自 动 生 成 清 单 2-4 为 秘 诀 1 使 用 的 该 文 件 清 单 2-4 gen/com/cookbook/simple_activity/r.java 1 2 3 4 5 6 7 8 9 此 处 的 每 个 资 源 都 被 映 射 成 一 个 唯 一 的 整 型 值 通 过 这 种 方 式,R.java 类 提 供 了 一 种 在 Java 代 码 中 引 用 外 部 资 源 的 方 法 例 如 想 要 在 Java 文 件 中 引 用 main.xml 布 局 文 件, 就 需 要 使 用 整 型 值 R.layout.main 如 果 是 在 XML 文 件 中 引 用 main.xml 文 件, 就 需 要 使 用 "@layout/main" 字 符 串 在 Java 或 者 XML 文 件 中 引 用 资 源 请 参 见 表 2-2 请 注 意, 假 若 要 定 义 一 个 ID 为 home_button 的 按 钮, 需 要 在 引 用 字 符 串 前 添 加 + 号, 即 :@+id/home_button 第 4 章 再 详 细 地 探 讨 资 源 引 用, 此 处 内 容 对 本 章 秘 诀 的 学 习 已 经 足 够 10 11 12

22 第 2 章 应 用 程 序 基 础 知 识 :Activity 和 Intent 表 2-2 在 Java 和 XML 文 件 中 引 用 不 同 的 资 源 资 源 在 Java 中 引 用 在 XML 中 引 用 res/layout/main.xml R.layout.main @layout/main res/drawable-hdpi/icon.png R.drawable.icon @drawable/icon @+id/home_button R.id.home_button @id/home_button <string name="hello"> R.string.hello @string/hello 2.1.3 Android 包 和 Manifest 清 单 文 件 Android 工 程, 有 时 也 称 为 Android 包, 是 Java 包 的 集 合 不 同 的 Android 包 可 以 包 含 相 同 名 称 的 Java 包, 但 在 安 装 到 Android 设 备 上 时, 各 个 Android 包 的 名 字 必 须 是 唯 一 的 为 了 操 作 系 统 能 够 正 确 访 问 这 些 Android 包, 每 个 应 用 程 序 必 须 在 名 为 AndroidManifest 的 XML 文 件 中 注 册 声 明 它 所 使 用 的 组 件 此 外 该 XML 文 件 还 包 含 运 行 该 应 用 程 序 所 需 的 权 限 及 操 作 清 单 2-5 为 秘 诀 1 所 用 文 件 清 单 2-5 AndroidManifest.xml Android 包 所 有 XML 文 件 第 一 行 都 必 须 指 定 编 码, 该 行 代 码 为 标 准 代 码 manifest 元 素 定 义 Android 包 的 名 称 和 版 本 号 versioncode 可 以 根 据 你 的 程 序 情 况 定 义, 为 确 定 版 本 高 低 关 系 的 一 个 整 数 versionname 采 用 人 可 读 懂 的 格 式 表 示, 可 以 声 明 主 次 修 订 版 本 号 application 元 素 定 义 用 户 从 Android 设 备 菜 单 可 以 看 到 的 应 用 程 序 图 标 和 名 称 名 称 是 一 个 字 符 串, 为 了 确 保 在 用 户 设 备 中 将 其 显 示 在 应 用 图 标 下 方, 应 该 尽 量 使 其 简 短 一 般 来 说, 名 称 最 多 两 个 单 词, 每 个 单 词 最 好 在 十 个 字 符 之 内, 中 间 不 能 含 有 空 格 activity 元 素 定 义 程 序 启 动 时 触 发 的 主 activity, 以 及 该 activity 激 活 后 标 题 栏 中 显 示 的 名 称 在 这 儿 需 要 指 定 Java 包 名, 本 例 为 com.cookbook.simple_activity, 相 应 activity 名 称 为 Simple-

2.2 Activity 的 生 命 周 期 23 Activity 由 于 Java 包 名 称 一 般 和 Android 包 名 称 一 致, 所 以 常 常 会 使 用 缩 写 SimpleActivity 不 过 最 好 记 住 Android 包 和 Java 包 还 是 有 区 别 的 intent-filter 元 素 向 系 统 说 明 该 组 件 功 能 鉴 于 此 作 用, 它 可 以 包 含 多 个 action,category 或 者 data 元 素 该 点 在 不 同 的 秘 诀 中 都 有 所 体 现 uses-sdk 元 素 定 义 运 行 此 程 序 所 需 的 API 级 别 一 般 来 说,API 级 别 定 义 如 下 : 1 2 由 于 Android 系 统 向 前 兼 容,maxSdkVersion 所 定 义 的 最 高 API 支 持 版 本 会 令 人 极 度 沮 丧, 因 为 它 不 支 持 Android 2.0.1 及 之 后 的 版 本 targetsdkversion 可 要 可 不 要, 该 项 用 于 允 许 同 一 SDK 版 本 的 设 备 禁 用 加 快 操 作 速 度 的 升 级 兼 容 性 设 置 但 minsdkversion 必 须 定 义, 以 确 保 应 用 程 序 在 不 支 持 该 应 用 所 需 的 功 能 的 平 台 上 运 行 时 不 会 崩 溃, 定 义 时 尽 可 能 选 择 较 低 的 API 级 别 AndroidManifest 存 放 运 行 该 应 用 程 序 所 需 的 权 限 我 们 会 在 随 后 的 章 节 中 进 一 步 详 细 阐 述, 但 以 上 部 分 基 本 可 以 涵 盖 本 章 秘 诀 2.1.4 重 命 名 应 用 程 序 中 的 部 分 文 件 有 时 候 我 们 需 要 重 命 名 Android 工 程 的 部 分 文 件, 或 许 是 从 本 书 中 手 动 复 制 一 个 文 件 放 在 工 程 中, 或 许 是 在 开 发 过 程 修 改 了 程 序 名 称, 需 要 在 文 件 系 统 的 目 录 树 反 映 出 来 Android 提 供 了 工 具 帮 我 们 自 动 完 成 此 项 工 作, 并 且 可 以 同 步 更 新 交 叉 引 用 例 如 在 Eclipse IDE 中, 使 用 下 列 不 同 的 方 式 来 重 命 名 应 用 程 序 的 部 分 文 件 重 命 名 Android 工 程, 步 骤 如 下 : (1) 右 键 单 击 该 工 程 选 择 Refactor Move 移 到 文 件 系 统 中 的 一 个 新 目 录 ; (2) 右 键 单 击 该 工 程 选 择 Refactor Rename 重 命 名 工 程 重 命 名 Android 包, 步 骤 如 下 : (1) 右 键 单 击 该 包 选 择 Refactor Rename 重 命 名 该 包 ; (2) 更 新 AndroidManifest.xml 包 名 称 重 命 名 Android 类 ( 如 Activity Service BroadcastReceiver ContentProvider 等 主 要 组 件 ), 步 骤 如 下 : (1) 右 键 单 击 该 Java 文 件 选 择 Refactor Rename 重 命 名 该 类 文 件 ; (2) 更 新 AndroidManifest.xml 确 保 android:name 使 用 新 组 件 名 注 意 重 命 名 XML 文 件 等 其 他 类 型 文 件 的 时 候, 通 常 都 要 手 动 修 改 Java 代 码 中 的 相 应 的 引 用 2.2 Activity 的 生 命 周 期 程 序 中 的 每 个 activity 都 有 自 己 的 生 命 周 期 通 过 调 用 oncreate() 方 法,activity 能 且 仅 能 被 创 建 一 次 当 ondestroy() 方 法 执 行 时, 该 activity 随 即 关 闭 正 如 图 2-2 所 阐 述 的 那 样, 不 同 事 件 可 以 导 致 activity 不 同 的 运 行 状 态 秘 诀 2 将 为 我 们 一 一 呈 现 这 些 功 能 3 4 5 6 7 8 9 10 11 12

24 第2章 应用程序基础知识 Activity 和 Intent activity 开始 oncreate() 用户操作返回到 创建状态 进程被结束 onstart() onrestart() onresume() activity 运行中 此activity 重新回到前台 另外一个activity到来 另外一个activity需要 使用内存 此activity 重新回到前台 onpause() 当前activity处于不显 示状态 onstop() ondestroy() activity 关闭 图2-2 activity的生命周期 来源 http://developer.android.com/ 2.2.1 秘诀 2 使用其他的生命周期方法 下面的秘诀提供了一种查看活动中activity生命周期的简单方法 为便于演示 每个被重载的 方法都有明确说明 我们通过加入Toast命令 使得该方法在启动的时候 在屏幕上显示 关 于Toast微件的更多内容请参见第3章 在Android设备上运行以下代码 如清单2-6所示 并尝 试各种情况 特别是注意以下几种操作 颠倒屏幕方向 将结束并重新运行activity 按下Home按钮将暂停activity 但并不结束 按下程序图标可能会开启新的activity实例 即使先前的activity没有关闭 屏幕处于休眠态时会暂停activity 屏幕重新唤醒时会继续该activity 类似于呼入电话

2.2 Activity 的 生 命 周 期 25 清 单 2-6 src/com/cookbook/activity_lifecycle/activitylifecycle.java 1 2 3 4 5 6 7 8 9 10 11 12

26 第 2 章 应 用 程 序 基 础 知 识 :Activity 和 Intent 我 们 可 以 看 到, 用 户 的 很 多 常 见 操 作 都 可 能 会 导 致 activity 暂 停 运 行 结 束 甚 至 启 动 数 个 应 用 程 序 版 本 在 继 续 下 一 部 分 内 容 之 前, 有 必 要 给 大 家 介 绍 两 种 方 法 来 控 制 这 种 操 作 行 为 2.2.2 秘 诀 3: 强 制 执 行 单 任 务 模 式 如 果 应 用 程 序 跳 转 走 后 再 次 启 动 的 话, 可 能 会 在 设 备 上 产 生 多 个 activity 实 例 最 终 为 释 放 内 存, 多 余 的 activity 实 例 会 被 系 统 杀 死, 但 与 此 同 时, 也 很 可 能 会 导 致 异 常 为 避 免 上 述 情 况 发 生, 程 序 员 可 以 在 AndroidManifest 中 控 制 每 个 activity 的 这 种 行 为 为 确 保 设 备 上 只 有 一 个 activity 实 例 在 运 行, 需 要 在 activity 元 素 中 包 含 MAIN 和 LAUNCHER 两 个 intent 过 滤 器, 如 下 : 该 行 代 码 确 保 在 任 务 中 的 任 何 时 刻, 每 个 activity 都 只 有 唯 一 一 个 运 行 实 例 此 外, 该 实 例 的 所 有 子 activity 都 作 为 自 身 任 务 启 动 为 进 一 步 限 制 应 用 程 序 中 的 所 有 activity 都 只 能 运 行 一 个 实 例, 不 妨 使 用 以 下 代 码 : 这 样 使 得 所 有 activity 作 为 同 一 个 任 务, 共 享 信 息 非 常 方 便 此 外, 有 时 我 们 希 望 无 论 用 户 通 过 什 么 方 式 进 入 activity 都 能 够 保 存 任 务 的 状 态 例 如, 如 果 用 户 离 开 了 应 用 程 序, 不 久 后 又 重 新 启 动 了 该 应 用 程 序, 默 认 情 况 下 系 统 会 重 设 任 务 到 初 始 化 状 态 为 确 保 用 户 总 是 能 返 回 到 关 闭 之 前 的 状 态, 需 要 在 任 务 的 根 activity 的 activity 元 素 的 属 性 中 作 如 下 定 义 : 2.2.3 秘 诀 4: 强 制 屏 幕 方 向 每 个 带 有 加 速 度 计 的 Android 设 备 都 可 以 判 定 方 向 当 设 备 由 纵 向 模 式 切 换 到 横 向 模 式 时, 默 认 动 作 是 相 应 地 旋 转 应 用 程 序 视 图 然 而 秘 诀 2, 倒 置 屏 幕 会 导 致 已 经 结 束 的 activity 重 新 启 动 如 果 是 这 种 情 况, 那 么 就 会 丢 掉 当 前 的 程 序 状 态, 从 而 破 坏 用 户 体 验 解 决 屏 幕 倒 置 问 题 的 一 种 方 案 是 在 发 生 改 变 之 前 保 存 用 户 的 状 态, 改 变 方 向 后 重 新 启 动 activity 时 读 取 用 户 先 前 状 态 还 有 一 种 更 简 单 的 办 法, 就 是 强 制 设 定 屏 幕 的 方 向, 禁 止 旋 转 切 换 视 图 AndroidManifest 中 列 出 的 每 个 activity 都 可 以 定 义 屏 幕 方 向 比 如 为 了 指 定 某 个 activity 始 终 以 纵 向 模 式 运 行, 在 activity 元 素 中 可 以 添 加 如 下 代 码 : 同 样, 如 果 想 设 定 为 横 向 模 式, 可 以 使 用 如 下 代 码 : 然 而, 在 硬 键 盘 滑 出 时, 先 前 的 情 况 还 是 会 导 致 activity 的 关 闭 和 重 新 启 动 所 以 我 们 可 以 采