这是一本全面介绍Android 相关知识的图书,全书分为三个部分,由浅入深,从Android 初级知识,讲到一些关于核心编程的实用示例,最后还讨论了一些高级应用程序的话题。在介绍Android 编程的时候,各主题都使用了独立的示例来演示,这些示例也都可单独作为想在Android 编程中大展拳脚的编程新手或资深开发者的参考。
本书适合Android 开发人员和技术爱好者阅读。如果能从头到尾读完本书,读者将对Android 有深入的了解,从而能在Android 开发中大显身手。
第一部分 Android概述
第1章 Android简介 2
1.1 Android简介 2
1.1.1 Android平台 3
1.1.2 Android的市场 4
1.1.3 Android许可 7
1.2 Android的栈组成 8
1.3 开始Android开发 11
1.3.1 Android的Intent 11
1.3.2 激活Android 14
1.3.3 AndroidManifest.xml 20
1.3.4 将应用程序映射到进程 22
1.4 一个Android应用程序 22
1.5 小结 26
第2章 开发环境 27
2.1 Android SDK 27
2.1.1 应用程序编程接口 28
2.1.2 核心Android包 28
2.1.3 可选包 29
2.2 完美契合 29
.2.2.1 Java透视图 30
2.2.2 DDMS透视图 32
2.2.3 命令行工具 34
2.3 在Eclipse中构建Android应用程序 36
2.3.1 Android Project Wizard 37
2.3.2 Android示例应用程序代码 37
2.3.3 生成应用程序 42
2.4 Android Emulator 43
2.4.1 皮肤 44
2.4.2 网络速度 44
2.4.3 模拟器配置文件 46
2.5 调试 47
2.6 小结 48
第二部 Android SDK实战
第3章 用户界面 50
3.1 创建活动 51
3.1.1 创建Activity类 52
3.1.2 探讨活动的生命周期 57
3.2 使用视图 60
3.2.1 通用视图 60
3.2.2 使用ListView 63
3.2.3 利用Handler和Message实现多任务 66
3.2.4 创建自定义视图 67
3.2.5 理解布局 69
3.2.6 处理焦点 71
3.2.7 掌握事件 72
3.3 使用资源 73
3.3.1 支持的资源类型 73
3.3.2 在Java中引用资源 74
3.3.3 通过XML资源定义视图和布局 76
3.3.4 值的外化 78
3.3.5 提供动画 81
3.4 理解AndroidManifest文件 81
3.5 小结 84
第4章 Intent与服务 85
4.1 使用Intent类 86
4.1.1 定义Intent 86
4.1.2 解析Intent 89
4.1.3 匹配自定义URI 92
4.1.4 使用Android提供的活动 96
4.2 使用广播接收器进行侦听 97
4.2.1 扩展Intent概念 97
4.2.2 创建接收器 98
4.3 构建服务 99
4.3.1 服务的两用性 100
4.3.2 创建可运行后台任务的服务 100
4.4 实现进程间通信 103
4.4.1 Android接口定义语言 104
4.4.2 公开远程接口 106
4.4.3 绑定到服务 106
4.4.4 启动服务与绑定服务 108
4.4.5 服务的生命周期 109
4.4.6 Binder类和Parcelable接口 110
4.5 小结 111
第5章 存储和检索数据 112
5.1 使用首选项 112
5.1.1 使用SharedPreferences 113
5.1.2 首选项访问权限 116
5.2 使用文件系统 119
5.2.1 创建文件 119
5.2.2 访问文件 120
5.2.3 作为原始资源的文件 121
5.2.4 XML文件资源 122
5.2.5 通过SD卡实现外部存储 124
5.3 将数据持久存储到数据库中 127
5.3.1 构建和访问数据库 128
5.3.2 使用sqlite3工具 132
5.4 使用ContentProvider类 133
5.4.1 理解URI表示和操作记录 135
5.4.2 创建ContentProvider 142
5.5 小结 148
第6章 联网与Web服务 150
6.1 联网概述 152
6.1.1 联网基础知识 152
6.1.2 客户端与服务器 153
6.2 检查网络状态 154
6.3 使用服务器套接字进行通信 155
6.4 使用HTTP 158
6.4.1 简单HTTP和Java.net 158
6.4.2 使用HttpClient的健壮HTTP 160
6.4.3 创建HTTP和HTTPS帮助类 161
6.5 Web服务 167
6.5.1 POX——将它与HTTP和XML结合在一起 168
6.5.2 REST 170
6.5.3 用还是不用SOAP,这是个问题 173
6.6 小结 174
第7章 电话技术 175
7.1 电话技术背景与术语 176
7.2 访问电话技术信息 177
7.2.1 获取电话技术属性 177
7.2.2 获取电话状态信息 179
7.3 与电话交互 181
7.3.1 使用Intent打电话 181
7.3.2 有用的电话号码相关实用工具 182
7.3.3 拦截电话 184
7.4 处理消息传递:SMS 185
7.4.1 发送SMS消息 185
7.4.2 接收SMS消息 187
7.5 小结 188
第8章 通知与提醒 189
8.1 Toast简介 189
8.2 通知简介 192
8.3 提醒 195
8.4 小结 201
第9章 图形与动画 202
9.1 在Android中绘制图形 202
9.2 动画 206
9.2.1 以编程方式创建动画 209
9.2.2 面向嵌入式系统的OpenGL简介 213
9.3 小结 224
第10章 多媒体 225
10.1 多媒体与OpenCORE简介 225
10.2 播放音频 226
10.3 播放视频 228
10.4 捕捉媒体 230
10.4.1 了解相机 230
10.4.2 捕捉音频 235
10.5 小结 238
第11章 位置服务 239
11.1 在模拟器中模拟位置 241
11.1.1 使用DDMS工具发送坐标 241
11.1.2 GPS交换格式 243
11.1.3 Google Earth Keyhole标记语言 245
11.2 使用LocationManager和
LocationProvider 246
11.2.1 使用LocationManager 访问位置数据 247
11.2.2 使用LocationProvider 249
11.2.3 使用LocationListener 接收位置更新 250
11.3 处理地图 253
11.3.1 扩展MapActivity 253
11.3.2 使用MapView 254
11.3.3 使用Overlay将数据放在地图上 256
11.4 使用Geocoder转换位置和地址 259
11.5 小结 262
第三部分 Android应用程序
第12章 全面应用:Field Service
Application 264
12.1 Field Service Application的需求 265
12.1.1 基本需求 265
12.1.2 数据模型 266
12.1.3 应用程序架构与集成 267
12.2 Android应用程序之旅 268
12.2.1 应用程序流 268
12.2.2 代码路线图 269
12.2.3 AndroidManifest.xml 271
12.3 Android代码 271
12.3.1 Splash Activity 271
12.3.2 FieldService Activity,第1部分 273
12.3.3 FieldService Activity,第2部分 275
12.3.4 设置 276
12.3.5 数据结构 278
12.4 深入剖析代码 286
12.4.1 RefreshJobs 286
12.4.2 ManageJobs 289
12.4.3 ShowJob 292
12.4.4 CloseJob 296
12.5 服务器代码 302
12.5.1 调度程序用户界面 302
12.5.2 数据库 303
12.5.3 PHP调度程序代码 303
12.5.4 PHP移动集成代码 304
12.6 小结 305
第13章 Android高级编程 306
13.1 Android/Linux:接合 306
13.1.1 工具链 307
13.1.2 构建应用程序 307
13.1.3 安装和运行应用程序 308
13.1.4 构建脚本 310
13.2 更好的方法 311
13.2.1 static标记 311
13.2.2 链接 313
13.2.3 退出,而不是返回 314
13.2.4 启动代码 315
13.3 现在几点了 317
13.3.1 Daytime Server应用程序 318
13.3.2 daytime.c 318
13.3.3 SQLite数据库 320
13.3.4 编译并运行Daytime Server 322
13.4 Daytime Client 324
13.4.1 活动 324
13.4.2 套接字客户机 325
13.4.3 测试Daytime Client 326
13.5 小结 327
附录A 安装Android SDK 329
附录B 在Android设备上签名和安装
应用程序 336
Android是谷歌公司开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序——一部手机工作所需的全部软件,而且不存在任何阻碍移动产业创新的专有权障碍。谷歌公司与开放手机联盟合作开发了Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和T-Mobile在内的30多家技术和无线应用的领军企业组成。谷歌公司希望通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。
本书提供了关于Android平台和Android开发的全面信息,涵盖了Android开发流程中所需的各方面信息,包括Android平台的基本概念、开发环境的搭建和设置、用户界面组件的使用、交互机制、数据存储和检索、电话功能、通知与提醒、Graphic API和多媒体支持。本书还提供了大量示例程序,所有代码都配有详尽的说明,并在最后指导读者创建了一个复杂的应用程序——既是对所学知识的巩固和应用,也是对实际开发的演练。
本书覆盖面广、结构清晰,是一本关于Android开发的全新入门指南。它面向具备基本Java知识的各层次开发人员,无论你是经验丰富的专业程序员,还是初涉编程领域的新手,都可以从本书中获取有价值的信息。书中的示例通用性高,特别适合读者参考使用,读者可以将本书作为一本开发参考手册。
Android是一个新兴的软件开发环境,目前国内关于Android开发的资料非常有限。相信本书的出版可以为Android开发的发展起到积极的推动作用。
本书由张波、高朝勤、杨越、漆振、徐红霞等翻译,由张波进行全书统稿。作为原著作者与中文读者之间的“传话人”,我们希望能把作者要表达的意思用中文完整且准确地传达出来,使更多的读者能从中受益。虽然我们在翻译过程中竭力以信、达、雅为目标,但由于水平有限,书中难免会出现疏漏,恳请广大读者给予批评指正。
我接触的第一个移动应用程序是在零售和制造行业中使用的库存控制程序。那时,这个所谓的“终端”拿在手里实在不轻,并且很昂贵。这种终端有着长长的天线、厚实的键盘和单色的LCD显示器,看上去就像老科幻电影中的道具。
这就是我见到的第一个移动设备,此后,20世纪90年代中后期兴起的Palm Pilot改变了我对移动设备的认识。我参与的第一个大型PalmOS项目是为能够打印日历表、联系人和任务列表的应用程序开发一个IrDA通信库。这种打印机(那时还很新潮呢)拥有一个IrDA端口,能够将你的名片直接扫描传递给其他人。具有讽刺意味的是,我对设计和编写软件的热情始终高于使用设备本身。
很快10年就过去了,而我在这段时间内也有幸参与了一些非常具有挑战性的移动软件项目,项目的客户遍及多种行业。我职业生涯中从事的大部分工作都与我的早期移动开发经验有着千丝万缕的联系,我真是幸福得很。我很喜欢别人问我“……是否可能?”而我经常会告诉他们:“是的!”我很喜欢通过应用移动软件改变企业运营的方式或解决问题的方式。移动技术能够并且将继续改变我们生活、工作和娱乐的方式,而这正是我使用Android以及撰写本书的原因。
2007年秋,我与朋友Troy Mott——他恰巧是Manning(出版本书的出版社)的编辑——又一次谈论了我们已经谈论了很多年的移动市场。这一次,我们迸发了编写一本关于Android的图书的想法。当时的挑战在于Android尚未实际发布。但是,我们从一些预先发布的信息中了解到,该平台的目标是成为开放、强大和流行的平台。我们觉得这些内容足以构成一个有趣且有价值的主题,因此,我们开始考虑本书的大体结构,并坚信该平台最终能够成熟。
不久以后,我们说服了自己(以及Manning)确信上述想法是个好主意,并于2008年初开始付诸行动。除了写书,我们还要面对其他一些棘手的问题,因为这本书的主题在过去几年中一直在变化,显得不可预测。这本书从本质上说写了两次,因为SDK发生了多次变化,并且随着支持Android的电话的出现,人们对该平台的关注和要求也在不断增加。每次出现重大变更时,我们都会重新修改本书的相关部分,有时需要重写整章内容才能与Android平台的最新功能保持一致。
我说“我们”是因为在编写本书的过程中,我和Troy邀请了两名经验丰富的作者加入我们的队伍,他们的专业知识和对该平台的激情在本书中尽显无遗。能够认识Charlie Collins和Robi Sen并与他们合作让我十分愉快。
我主要负责本书的第一部分和第三部分,Charlie和Robi编写了本书的第二部分(介绍了编写Android应用程序相关的重要基础知识)。感谢他们出色的工作,让我能在第一部分中随意表达我认为Android对于移动领域的意义,并在最后一部分中演示了一些比较高级的应用程序。
我们希望你能喜欢本书,也希望在今后几年我们共同创造Android平台美好未来的征途中,一起见证本书的价值。
Frank Ableson
目前,移动电话和便携式手持设备正在经历一场变革。引发这场变革的因素有很多。一方面,日益强大的便携式设备已经能够处理几年前人们还无法想象的任务。很多人都在使用便携式设备处理各种任务,从浏览网页、看电影到玩3D游戏——甚至还可以打电话!另一方面,消费者也变得越来越精明,他们对这类设备的要求也越来越高。此外,围绕便携式设备形成的软件和应用程序开发市场已经超越了较大型计算平台的市场,并且相对大型设备而言,为这些设备交付应用程序更加简单和高效。
下一代手机已经提供了硬件图形加速、无线连接、数据访问计划、GPS、硬件的扩展和连接、触摸屏等功能。人们正在编写不同的操作系统和应用程序以充分利用这些新功能,而且这些应用程序的交付方式正在悄然经历着革命性的变化——消费者开始能够控制设备的功能,开发人员与消费者之间的联系也变得前所未有地紧密。消费者能获得所需的软件,而开发人员能让自己的产品进入潜力无限的市场。
这次变革预示着更加开放的趋势。这种开放性体现在多个方面:设备功能强大且可被广泛利用,应用程序可由大家开发并方便地投入市场,以及手持设备制造商、网络运营商和软件提供商之间的相互协作。显然,该领域还有很大的改进空间,但我相信在所有的下一代移动平台中,Android的开放理念是无人能及的。
Android是由移动设备行业中的30多家公司(包括硬件制造商、运营商和软件公司)共同研发的操作系统,旨在为市场提供更加优秀的移动电话平台。研发成果包括操作系统本身和配套的应用程序开发环境,开发环境能够在多种设备上运行,并为开发人员提供具有大量特性的一致性环境。这个庞大的Android生态系统最终将包括多种手持设备,在其上构建的大量应用程序和组件,以及多种分发渠道(包括已经存在的Android市场)。
从某些方面来说,为Android编写应用程序类似于基于企业或基于容器的开发。Android并未提供与应用程序运行绑定的整套环境,而是提供一种方法让应用程序可以运行在各种Android环境中。这个环境基于Java工具和技能,缩短了新平台的学习过程,并在一种可控制的语言中融入了开发的简便性和安全性。Android允许你在后台运行服务,并提供了可以与其他应用程序互通有无的组件和数据服务。
简而言之,Android对于应用程序开发人员来说是一种非常优秀的开发环境,而本书将帮助你充分发挥它的潜力。作者将循循善诱地指导你,从开发工具、架构到基本和高级的API,一直到本机应用程序开发等更加深入的主题。本书将成为你在这个新兴的、激动人心的开放平台上开发应用程序的指路明灯。
Dick Wall
现任Navigenics公司软件工程师
著名Java技术播客The Java Posse的四位主持之一
曾任谷歌公司Android技术推广专家
“强烈推荐!”
——Horaci Macias,Avaya集团软件架构师
“本书富含有价值的代码和技巧。”
——Scott Webster,AndroidGuys网站编辑
“无论对菜鸟还是高手,这本书都可谓是一盏指路明灯。”
——Kevin Galligan,Medical Research Forum公司CTO