Chinaunix首页 | 论坛 | 博客
  • 博客访问: 526386
  • 博文数量: 235
  • 博客积分: 1209
  • 博客等级: 少尉
  • 技术积分: 1417
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 19:59
文章分类

全部博文(235)

文章存档

2012年(107)

2011年(128)

分类:

2012-03-05 04:05:53

Android 应用开发实战

李宁 著wps_clip_image-13401

这是一本实践与理论紧密结合的 Android 应用开发参考书。实践部分以一个完整的大

型案例(功能完善的微博客户端)贯穿始终,以迭代的方式详细演示和讲解了该案例的开

发全过程,旨在帮助读者迅速理清 Android 应用开发的完整流程和实现细节,同时,对开

发过程中所涉及的理论知识进行了详细的分析和讲解。理论部分是对实践部分的升华,对

Android 应用开发所需具备的高级知识和常用技巧进行了深入的阐述,读者掌握这部分内容

后,在迅速获得实际应用开发经验之后还能进一步提升自己的理论技术功底。

全书一共分为三个部分。第一部分基础篇:全面介绍了 Android 的系统架构、开发环境

的搭建、Android 应用程序的常用组件,以及一个简单的微博客户端的实现方法,为接下来

动手实现本书中的完整案例(新浪微博客户端)奠定了基础;第二部分实例篇:介绍了微博

客户端的概况以及新浪微博 API,然后根据微博客户端的功能划分详细地介绍了微博客户端

各个功能模块的实现方法和细节,包括界面展示、代码分析,还有对所运用的理论知识的

重点讲解,既便于读者动手实践,又能帮助读者巩固已经掌握的理论知识 ;第三部分高级

篇 :讲解了 Android 开发中的高级技术,包括各种常用的 Android 资源、通信功能的开发、

数据库、蓝牙与 Wi-Fi、第三方程序库、2D 绘图技术、OpenGL ES 绘图技术、Android

编译,以及 Android 的性能优化方法和实践;最后,详细介绍了 Android 4.0 的新特征。

封底无防伪标均为盗版

版权所有,侵权必究

本书法律顾问 北京市展达律师事务所

图书在版编目(CIP)数据

Android 应用开发实战 / 李宁著 .北京:机械工业出版社,2011.11

ISBN 978-7-111-36260-9

I. A II. III. 移动电话机 - 应用程序 - 程序设计 IV. TN929.53

中国版本图书馆 CIP 数据核字(2011)第 217326

机械工业出版社(北京市西城区百万庄大街 22 号 邮政编码 100037

责任编辑:白 宇

印刷

2012 1 月第 1 版第 1 次印刷

186mm×240mm · 27.75 印张

标准书号:ISBN 978-7-111-36260-9

定价:69.00

凡购本书,如有缺页、倒页、脱页,由本社发行部调换

客服热线: 0108837899188361066

购书热线: 010683262948837964968995259

投稿热线: 01088379604

读者信箱:hzjsj@hzbook.comwps_clip_image-17250wps_clip_image-9386wps_clip_image-15264

前 言 

为什么要写这本书

几年前开始接触 Android 时就被 Android 自由开发的精神所感染。虽然 Android 在诞生

之初曾在 iPhone 的阴影下沉寂了很长时间,也受到很多的质疑,但随着加入 Android 阵营的

手机厂商、软件开发商、电信运营商和个人开发者的增多,Android 的势头也逐渐赶上并超

过了 iPhone,成为占有率第一的移动操作系统。

由于 Android 发展迅速,导致了就业市场对 Android 开发人员的需求量猛增。然而,很

多企业需要的是拥有实践经验的开发人员。刚毕业的大学生一般没有企业要求的实践经验,

而培训机构的高昂培训费又令他们望而却步。尽管可以通过很多 Android 书籍中的小例子积

累一些经验,但这些例子毕竟有限,有的也不完整,根本达不到企业所要求的水平。笔者在

参与公司的面试过程中多次遇到了这些问题。为此,笔者特意选择了一个完整的项目新浪微

博客户端作为本书的核心来讲解,其中涉及大部分的 Android 技术。读者通过仔细研究这个

项目的实现方法以及本书提供的源代码,可以大大增加自己的实践经验。为了使读者获得更

多的 Android 知识,本书还重点介绍了几项 Android SDK 中常用的技术,为读者提供实践经

验外的理论储备。

读者对象

想增加 Android 实践经验的 Android 初学者

想从事 Android 开发工作的在校或即将毕业的大学生

Java 基础,想进入移动领域的开发人员

想进一步提高技术和实践能力的开发人员

开设 Android 课程的大专院校和培训机构

所有对 Android 感兴趣的读者wps_clip_image-21636wps_clip_image-1524wps_clip_image-32000wps_clip_image-14009wps_clip_image-10789wps_clip_image-13963

IV

如何阅读本书

本书分为三大部分:

第一部分为基础篇,介绍了 Android 开发的基础知识,除此之外,还介绍了如何使用新

浪微博 SDK 开发客户端程序,并给出一个简单的例子供读者练习。

第二部分为实例篇,通过一个新浪微博客户端程序介绍如何使用 Android 技术和新浪微

SDK 开发一个完整的应用程序。这部分相对独立,如果你是一名有经验的 Android 开发

人员,能够理解和使用 Android 开发技术,那么可以直接阅读这部分内容。但如果你是一名

Android 初学者,请一定从第 1 章开始学习。

第三部分为高级篇,重点介绍了 Android SDK 中一些常用的高级技术。例如 Android

源、电话和短信的处理、数据库、蓝牙、2D 3D 绘图、编译器在 Android 中的应用等。读

者可以通过这部分内容,进一步提高 Android 的理论和实践能力。

本书的大部分章节都提供了源代码(由于篇幅有限,书中只展示了核心代码,完整的源

代码可以在网上 下载),建议读者先阅读本书的内容,如果仍然不理解书中的理论和代码,

可以将完整的源代码导入 Eclipse 中,运行并调试这些代码。

在下载本书的源代码后,可以按下面的方法将 Android 工程导入 Eclipse

单击 Eclipse 的【FileImport】菜单项,打开【Import】对话框,选择【Existing Projects

into Workspace】节点,如图 1 所示。单击【Next】按钮进入下一个页面后,单击【Browse...】按

钮选择要导入的 Android 工程,如图 2 所示。最后单击【Finish】按钮即可导入 Android 工程。

wps_clip_image-17419

wps_clip_image-3941  

                                                      

1 选择【Existing Projects into Workspace】节点   图 2 选择要导入的工程

请先在华章公司网站(www.hzbook.com)上搜索到本书,在本书页面上即可找到相关源代码的下载链

接。编辑注wps_clip_image-28154wps_clip_image-31678

V

勘误和支持

除封面署名外,参加本书编写工作的还有赵华振、李斌锋、邓斌、戚祥、于伟、皮文

星、陈育春、陆正武、虞晓东、张恒汝、高喆、刘威、刘冉、付志涛、宗杰、王大平、李振

捷、李波、张鹏、管西京、闫芳、王玉芹、王秀明、杨振珂。

由 于 作 者 的 水 平 有 限, 编 写 时 间 仓 促, 书 中 难 免 会 出 现 一 些 错 误 或 者 不 准 确 的

地 方, 恳 请 读 者 批 评 指 正。 为 此, 笔 者 特 意 创 建 了 一 个 在 线 答 疑 和 发 布 勘 误 的 论

http://books.51happyblog.com,读者可以将书中的错误、建议、技术问题发布在相关的

版页,同时也请关注本论坛发布的本书相关信息。书中的全部源代码除可以从华章公司的

网站下载外,还可以从这个论坛下载。如果你有更多的宝贵意见,也欢迎发送邮件至邮箱

techcast@126.com。期待得到你们的真挚反馈。

致谢

感谢所有在本书写作过程中给予我指导、帮助和鼓励的朋友,尤其是机械工业出版社华

章公司的编辑杨福川和白宇,他们不仅对本书提出了宝贵的写作建议,而且还对本书进行了

仔细的审阅。

感谢一直以来信任、鼓励、支持我的家人和朋友。

感谢 eoeAndroid、移动开发者社区的朋友对我技术上的帮助。

谨以此书献给我最亲爱的家人,以及众多热爱 Android 的朋友们!

李宁(银河使者)

2011 8 月于中国沈阳

  目 录

前 言

第一部分 基础篇—Android 开发基础

1Android 应用开发基础 / 2

1.1 Android 的系统构架 / 2

1.2 Android 开发环境搭建 / 3

1.2.1 安装 JDK 和配置 Java 开发环 / 3

1.2.2 安装 Android SDK / 4

1.2.3 安装 Eclipse 插件 ADT / 6

1.3 Android 应用程序中的资源 / 7

1.4 Android 的应用程序组件 / 8

1.4.1 ActivityAndroid 的窗体)/ 8

1.4.2 Service(服务)/ 9

1.4.3 Broadcast Receiver(广播接收器)/ 9

1.4.4 Content Provider(内容提供者)/ 10

1.5 小结 / 10

2 章 开发前的准备工作 / 11

2.1 建立 Android 工程 / 11

2.2 引用新浪微博 SDK / 12

2.3 引用第三方类库 / 12

2.4 跨工程调试新浪微博 SDK / 12

VII

2.5 异步访问 API / 13

2.5.1 使用 SDK 本身的异步功能 / 14

2.5.2 SDK 自定义异步功能 / 15

2.6 小结 / 18

3 章 实现一个简单的微博客户端 / 19

3.1 编写 Android 的服务 / 19

3.2 让任何拍照软件都成为微博客户端 / 19

3.2.1 可以监视目录文件的服务 / 20

3.2.2 发布带图像的微博 / 23

3.3 小结 / 25

第二部分 实例篇微博客户端开发

4 章 微博客户端概况 / 28

4.1 参考客户端 / 28

4.1.1 新浪微博官方 Android 客户端 / 28

4.1.2 网易微博官方 Android 客户端 / 30

4.1.3 腾讯微博官方 Android 客户端 / 30

4.2 功能模块展示 / 31

4.2.1 登录 / 31

4.2.2 账户管理 / 31

4.2.3 微博列表 / 32

4.2.4 私信列表 / 32

4.2.5 撰写微博 / 32

4.2.6 图像渲染 / 33

4.2.7 转发、评论与收藏微博 / 33

4.2.8 搜索微博和用户 / 33

4.3 小结 / 34

5 章 新浪微博 API 详解 / 35

5.1 新浪微博 API 有哪些功能 / 35

5.2 使用新浪微博 API 开发前的准备工作 / 36

5.2.1 申请新浪微博应用程序 / 36

VIII

5.2.2 访问和测试 API / 37

5.2.3 测试新浪微博 SDK / 40

5.3 身份认证 / 43

5.3.1 Basic 认证 / 43

5.3.2 OAuth 认证 / 44

5.4 利用新浪微博 SDK 获取微博消息 / 46

5.4.1 获取公共微博消息 / 46

5.4.2 获取登录用户首页的微博消息 / 48

5.4.3 获取当前用户发布的微博消息 / 50

5.4.4 获取 @ 提到我的微博消息 / 50

5.4.5 获取当前用户的评论列表 / 51

5.4.6 获取指定微博的评论列表 / 52

5.4.7 获取微博的评论数和转发数 / 53

5.4.8 获取用户相关消息 / 53

5.5 更新微博及其相关内容 / 54

5.5.1 发布文字微博 / 54

5.5.2 发布图像微博 / 55

5.5.3 评论微博 / 56

5.5.4 回复评论 / 56

5.5.5 转发微博 / 58

5.6 新浪微博 API 的搜索功能 / 59

5.6.1 搜索用户 / 59

5.6.2 搜索微博 / 59

5.7 小结 / 60

6 章 用户登录与用户注册 / 61

6.1 设计登录界面 / 61

6.1.1 登录界面的布局 / 61

6.1.2 登录界面的装载模式 / 63

6.2 事件处理机制 / 64

6.2.1 编写事件处理类 / 65

6.2.2 扩展微博事件处理 / 66

6.3 用户登录 / 69

6.3.1 响应用户登录事件 / 69

6.3.2 用户登录成功 / 70

IX

6.3.3 用户登录失败 / 71

6.4 用户注册 / 72

6.5 关注作者微博 / 72

6.6 小结 / 72

7 章 首页微博列表 / 73

7.1 主界面设计 / 73

7.1.1 主界面布局 / 73

7.1.2 微博列表项布局 / 77

7.1.3 装载主界面 / 78

7.2 实现系统工具类 / 81

7.2.1 NotificationProcess 类(处理通知列表)/ 81

7.2.2 SystemDBService 类(操作数据库)/ 85

7.2.3 HappyBlogConfig 类(读写配置文件)/ 87

7.2.4 ProcessTasks 类(处理返回数据)/ 88

7.3 系统初始化 / 90

7.3.1 初始化 SystemDBService 对象 / 90

7.3.2 为每个账号创建 MyMicroBlogAsync 对象 / 92

7.3.3 初始化处理微博列表的对象 / 93

7.4 装载首页微博数据 / 94

7.4.1 显示微博数据 / 94

7.4.2 装载头像和微博图像 / 96

7.5 小结 / 99

8 章 切换微博列表 / 100

8.1 显示公共微博列表 / 100

8.2 显示我的微博列表 / 104

8.3 显示 @ 提到我的微博列表 / 105

8.4 刷新当前的微博列表 / 106

8.5 小结 / 106

9 章 显示其他列表信息 / 107

9.1 显示我的所有评论列表 / 107

9.2 显示我发出的评论列表 / 109

X

9.3 显示我的收藏列表 / 110

9.4 显示私信列表 / 111

9.5 小结 / 113

10 章 账号管理 / 114

10.1 账号管理主界面 / 114

10.2 添加账号 / 116

10.3 删除账号 / 118

10.4 设置主账号 / 118

10.5 同步账号 / 119

10.6 注销 / 119

10.7 小结 / 121

11 章 撰写和发布微博 / 122

11.1 发布文字微博 / 122

11.2 发布带图像的微博 / 124

11.2.1 手机拍照 / 125

11.2.2 从相册中获得图像 / 126

11.2.3 删除图像 / 127

11.2.4 发布图像微博 / 127

11.3 微博的辅助输入工具 / 127

11.3.1 语音录入 / 127

11.3.2 插入表情 / 129

11.3.3 插入话题 / 130

11.4 小结 / 131

12 章 处理微博与评论 / 132

12.1 与微博相关的操作 / 132

12.1.1 评论微博 / 132

12.1.2 转发微博 / 135

12.1.3 删除微博 / 137

12.1.4 收藏微博 / 138

12.1.5 以大图方式浏览微博图像 / 139

12.1.6 图像另存为与图像分享 / 139

XI

12.2 查看微博的详细内容 / 146

12.3 显示与回复评论 / 148

12.4 小结 / 149

13 章 图像特效 / 150

13.1 图像特效主界面 / 150

13.2 特效处理框架 / 150

13.2.1 处理图像的接口 / 151

13.2.2 如何处理图像 / 151

13.3 选择图像区域 / 153

13.4 图像特效详解 / 160

13.4.1 灰度 / 160

13.4.2 马赛克 / 165

13.4.3 截图 / 168

13.4.4 自由旋转 / 169

13.4.5 恢复原始图像 / 170

13.5 发布经过特效处理的图像微博 / 170

13.6 小结 / 171

14 章 搜索微博与搜索用户 / 173

14.1 搜索界面布局 / 173

14.2 实现 JSON 格式的搜索 API / 174

14.3 搜索微博 / 177

14.4 搜索用户 / 178

14.5 小结 / 181

15 章 个性化设置 / 182

15.1 设置主题 / 182

15.1.1 主题目录列表 / 182

15.1.2 主题图像 / 186

15.1.3 设置主题背景图 / 192

15.2 设置背景颜色和透明度 / 194

15.3 设置文字颜色 / 198

15.4 小结 / 204

XII

16 章 签名和发布微博客户端 / 205

16.1 签名应用程序 / 205

16.1.1 使用命令行方式进行签名 / 205

16.1.2 使用 ADT 插件进行签名 / 206

16.2 发布微博客户端 / 207

16.3 小结 / 208

第三部分 高级篇—Android SDK 高级技术

17Android 资源详解 / 210

17.1 创建资源 / 210

17.2 访问资源 / 211

17.2.1 生成资源类文件 / 212

17.2.2 从代码中访问资源 / 214

17.2.3 XML 文件中访问资源 / 214

17.3 在代码中存取资源 / 216

17.3.1 存取简单资源 / 216

17.3.2 存取对象资源 / 219

17.3.3 处理配置变化 / 221

17.4 本地化 / 222

17.4.1 建立本地化的资源目录 / 222

17.4.2 资源目录的命名规则 / 225

17.4.3 建立别名资源 / 225

17.4.4 资源目录的优先级 / 227

17.5 资源类型 / 227

17.5.1 字符串(String)资源 / 227

17.5.2 布局(Layout)资源 / 230

17.5.3 图像(Drawable)资源 / 232

17.5.4 菜单(Menu)资源 / 242

17.5.5 动画(Animation)资源 / 243

17.5.6 风格(Style)资源 / 247

17.5.7 其他资源 / 248

17.6 小结 / 250

XIII

18 章 电话、短信与联系人 / 251

18.1 电话 / 251

18.1.1 显示拨号界面 / 251

18.1.2 直接拨打电话 / 251

18.1.3 控制呼叫转移 / 252

18.1.4 监听来 / 去电 / 254

18.1.5 用程序控制接听和挂断动作 / 257

18.1.6 获取通话记录 / 259

18.2 短信和彩信 / 261

18.2.1 通过系统程序发送短信 / 261

18.2.2 直接发送短信 / 261

18.2.3 保存短信发送记录 / 262

18.2.4 监听短信 / 264

18.2.5 发送彩信 / 265

18.2.6 监听彩信 / 266

18.2.7 显示视频缩略图 / 267

18.2.8 彩信内容与 SMIL 协议 / 270

18.3 联系人 / 280

18.3.1 查看联系人的内容 / 281

18.3.2 添加电话到联系人列表 / 282

18.3.3 修改联系人信息 / 283

18.3.4 删除联系人信息 / 284

18.4 小结 / 284

19 章 数据库 / 285

19.1 SQLite 数据库 / 285

19.1.1 管理 SQLite 数据库 / 285

19.1.2 SQLite 数据库基本操作 / 286

19.1.3 事务 / 288

19.1.4 核心函数 / 289

19.1.5 日期和时间函数 / 294

19.1.6 聚合函数 / 297

19.2 Android 版的 SQLite 数据库 / 299

19.2.1 操作数据库 / 299

XIV

19.2.2 升级数据库 / 300

19.2.3 数据绑定 / 302

19.3 持久化数据库引擎 db4o / 304

19.3.1 什么是 db4o / 304

19.3.2 下载和安装 db4o / 305

19.3.3 创建和打开数据库 / 305

19.3.4 操作 Java 对象 / 305

19.4 小结 / 308

20 章 蓝牙与 Wi-Fi / 309

20.1 蓝牙编程 / 309

20.1.1 蓝牙简介 / 309

20.1.2 控制蓝牙设备 / 310

20.1.3 使蓝牙设备可被搜索到 / 311

20.1.4 搜索蓝牙设备 / 313

20.1.5 蓝牙设备之间的数据传输 / 316

20.2 Wi-Fi 编程 / 320

20.2.1 控制 Wi-Fi 设备 / 320

20.2.2 获取 Wi-Fi 信息 / 321

20.2.3 客户端 Socket / 323

20.2.4 服务端 Socket / 324

20.2.5 移动版的 Web 服务器实例 / 324

20.2.6 在手机客户端访问 Web 服务器 / 329

20.3 小结 / 330

21 章 第三方程序库 / 331

21.1 GTalk 客户端 / 331

21.1.1 XMPP 协议简介 / 331

21.1.2 下载并安装 asmack / 331

21.1.3 登录 GTalk 服务器 / 332

21.1.4 获取联系人信息 / 333

21.1.5 监听联系人是否在线 / 335

21.1.6 发送聊天消息 / 336

21.1.7 接收聊天消息 / 337

XV

21.2 FTP 客户端 / 337

21.2.1 连接与断开 FTP 服务器 / 338

21.2.2 获取与改变当前工作目录 / 339

21.2.3 列出所有的文件和目录 / 339

21.2.4 建立、重命名、删除指定目录 / 341

21.2.5 上传、重命名、下载、删除指定文件 / 341

21.3 绘制图表的程序库 AChartEngine / 342

21.3.1 曲线图 / 342

21.3.2 条形图 / 346

21.3.3 离散点图 / 346

21.3.4 区域图 / 347

21.3.5 饼图 / 349

21.4 小结 / 349

22 章 编译在 Android 中的应用 / 350

22.1 JavaCC 使用入门 / 350

22.1.1 JavaCC 下载和安装 / 351

22.1.2 JavaCC 生成第一个分析器 / 351

22.2 JavaCC 语法 / 354

22.3 JavaCC 实战:计算器 / 355

22.3.1 生成计算表达式的分析器源代码 / 355

22.3.2 编写计算器的主程序 / 361

22.4 小结 / 365

23Android SDK 2D 绘图技术 / 366

23.1 绘图基础 / 366

23.1.1 绘制点 / 366

23.1.2 绘制直线 / 368

23.1.3 绘制三角形 / 368

23.1.4 绘制矩形和菱形 / 369

23.1.5 绘制圆、弧和椭圆 / 371

23.1.6 绘制文字 / 372

23.2 高级绘图技术 / 372

23.2.1 在画布上旋转图像 / 373

XVI

23.2.2 EditText 控件上绘制图像和文本 / 373

23.2.3 制作动画效果 / 375

23.3 绘图实战:电子罗盘 / 376

23.4 SurfaceView / 378

23.5 小结 / 380

24OpenGL ES 绘图技术 / 381

24.1 OpenGL ES 简介 / 381

24.2 构建 OpenGL ES 框架 / 381

24.3 OpenGL ES 绘制 2D 图形 / 382

24.3.1 三角形 / 382

24.3.2 矩形 / 384

24.3.3 为图形上色 / 385

24.4 OpenGL ES 实战:旋转立方体 / 387

24.4.1 绘制立方体 / 387

24.4.2 使立方体旋转起来 / 388

24.5 小结 / 389

25 章 性能优化 / 390

25.1 性能优化的基础知识 / 390

25.2 编写 Java 程序的最优化原则 / 391

25.2.1 用静态工厂方法代替构造方法 / 391

25.2.2 避免创建重复的对象 / 391

25.2.3 防止内存泄漏 / 393

25.2.4 接口只用于定义类型 / 394

25.2.5 返回零长度的集合而不是 null / 394

25.2.6 通过接口引用对象 / 395

25.3 避免 ANR / 395

25.4 性能检测 / 396

25.4.1 执行时间测试 / 396

25.4.2 内存消耗测试 / 398

25.4.3 测试性能的工具 traceview / 399

25.5 小结 / 400

XVII

26Android 4.0 新技术探索 / 401

26.1 全新的 Android,全新的体验 / 401

26.1.1 开发环境 / 401

26.1.2 模拟器 / 402

26.2 Activity 中的容器 Fragment / 405

26.2.1 Fragment 的特点 / 405

26.2.2 Fragment 的生命周期 / 406

26.2.3 显示对话框 / 410

26.2.4 隐藏和显示 Fragment / 412

26.2.5 回退堆栈 / 415

26.3 Android 4.0 的新特性 / 416

26.3.1 联系人提供者中的社会化 API / 416

26.3.2 高分辨率的联系人照片 / 417

26.3.3 新的日历 API / 417

26.3.4 语音信箱 / 417

26.3.5 多媒体 API / 417

26.3.6 人脸识别 / 418

26.3.7 焦距和感光区域 / 418

26.3.8 摄像头自动对焦 / 419

26.3.9 Wi-Fi 点对点连接 / 419

26.3.10 高级的网络应用 / 419

26.3.11 新增的设备传感器 / 420

26.3.12 WebKit 浏览器引擎 / 420

26.4 Android 4.0 实战:应用程序演示 / 420

26.5 小结 / 421

阅读(2539) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~