首页>参考读物>计算机科学与技术>软件与程序设计

Android应用开发实战(原书第2版)
作者 : [美]伊恩 F.达尔文(Ian F. Darwin)著
译者 : 胡训强 夏红梅 张文娟 译
出版日期 : 2018-03-20
ISBN : 978-7-111-58996-9
定价 : 139.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 684
开本 : 16
原书名 : Android Cookbook: Problems and Solutions for Android Developers
原出版社: OReilly Media, Inc.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

图书特色

图书前言

Android是应用于手机和移动运算的“开源革命”,至少是部分革命。为了提供开源手机,人们已经进行了大量努力,其中大部分成果在很大程度上都已经名存实亡,包括Openmoko Neo FreeRunner、嵌入式QT、Moblin、LiMo、Debian Mobile、Maemo、Firefox OS、Ubuntu Mobile以及开源的Symbian OS和现在销声匿迹的HP WebOS。我们也不要忘了已被证实是闭源的坚定分子—Apple公司的iOS以及两个次要角色(从市场占有率而言)—Microsoft公司的Windows Phone以及现在已被抛弃的BlackBerry OS 10。
在所有被提供的产品当中,有两个脱颖而出成为主角,其中Android必定占有一席之地!由于其开源许可,因此Android在全世界众多经济型手机上都得到了使用,据估计Android在世界智能手机市场中占有的份额高达90%。写作本书是为了帮助Android开发人群共享有助于开发出更好的应用程序的知识,那些在本书中贡献出知识的人使得Android开发对于后来者更加简单。
关于Android
Android是一个移动电话技术平台,可以为手机、平板电脑以及其他手持和移动设备(甚至上网本)提供Linux操作系统的强大功能和便携性、标准高级语言和API的可靠性、可移植性以及实用应用程序的巨大生态系统。Android应用程序大多数都是(利用诸如Eclipse和Android Studio之类的工具)用Java语言编写的,依赖于Android API进行编译并被转换成面向Android虚拟机的字节码。
因此,从操作系统家族的角度而言,Android和其他基于Linux的手机项目息息相关。从编程语言角度而言,Android还和BlackBerry的老旧的Java ME手机以及Java及领域更广的Java企业版应用程序有关。不要说现在所有的BlackBerry设备都能运行Android应用程序,实际上在其把剩余的智能手机业务外包出去之前,BlackBerry的最后一批设备只能运行Android。
现在大家公认Android占有世界智能手机市场几乎3/4的份额,但在平板电脑市场上它还没有取代Apple公司的iPad。销售数据随时都在变化,但是有一点非常明确:Android现在是并且将继续保持为移动领域的主角之一。
Android还可用于一些专门的平台。Android Wear将Android的编程模型带入了智能手表以及诸如健康跟踪器之类的可穿戴设备。Android Auto则被设计用于控制汽车里的娱乐单元。Android TV则在智能电视和不那么智能的电视的控制器上运行。最后,Android Things则被设计用于嵌入式市场,即现在称为的“物联网”(Internet of Things, IoT)。这中间的每一个平台都引人入胜,但为了让本书的篇幅保持在合理范围内,我们主要关注“常规的Android”,即面向智能手机和平板电脑应用程序的Android。
本书读者对象
本书关注利用Java构建Android应用程序,Java是Android应用程序的原生语言。将Web应用程序打包成移动应用程序当然也是可能的(参见19.10节),但是想利用这种方式获得有关当前Android所有功能特性的非常重要的100%正确的用户体验却很困难。
所以本书用到的是Java。我们假定你已经了解了Java语言的基础知识,如果没有,请参阅1.4节。我们还假定你已经了解了Java标准版API(因为它构成了Android运行时库的基础)以及Android的基础知识。虽然你不必非常精通Activity、Intent、Service和ContentProvider等术语,但至少应该熟悉它们。如果不是这样,我们已经为你准备好了补救措施:请参阅1.2节。
本书和Android SDK自带示例的不同之处在于,书中尝试更多地关注特定技术的工作原理,而不是给你提供一个完整可运行的例子,这样的例子既被简化了(使用非常简单的数据),同时又因为添加进若干与眼前的问题没有关系的“巧妙的”特性而复杂化了。
本书主要内容
第1章带你全面浏览一遍设置Android开发环境以及构建几个众所周知的“Hello, World”类型的简单应用程序的所有步骤,“Hello, World”类型程序的概念是由Brian Kernighan率先提出的。
第2章介绍了移动计算中的一些差异之处,这些差异会使从桌面和企业软件环境转型而来的开发人员不太适应。本章还谈论了移动设计(特别是Android设计)是如何与那些环境产生差异的。
测试对于一些开发人员而言经常是事后才想起来的事情,所以我们在第3章中早早地对其进行讨论。不这样做你就会略过它,而这样做了你就会读到并注意到它。我们探究了对单个组件进行单元测试和以一种控制良好的方式对整个应用程序进行全面测试。
Android为应用程序内部以及跨应用程序通信提供了各式各样的机制。在第4章中我们讨论了Intent以及广播接收器、Service、AsyncTask和Handler。
第5章涵盖了一系列与图形有关的主题,包括在Android中的图形化绘制和组合工具的用法,还讨论了利用桌面工具创建可被引入已完成的应用程序当中的图形化图像、纹理、图标等。
每个移动应用程序都需要GUI,所以第6章介绍了面向Android的GUI开发的主要细节。其中既有以XML形式给出的示例,也有一些示例以编写Java代码进行GUI开发的形式给出。
第7章介绍了所有弹出式GUI组件—菜单、对话框和Toast,还介绍了不会弹出但同样是在应用程序窗口外部进行交互的Android消息组件。
列出数据项在所有平台上的移动应用程序中都非常常见,第8章关注Android中的“列表”组件:ListView及其较新的替代品RecyclerView。
Android的多媒体功能非常丰富,第9章展示了如何使用其中一些最重要的功能。
第10章展示了如何把数据保存到文件、数据库等当中—当然,也介绍了如何从文件和数据库等取回数据。其他通信机制是关于允许对数据进行受控制的访问,这种访问通常发生在SQL数据库当中。该章还向你展示了如何通过与URL一样简单却无处不在的事物让应用程序数据可为其他应用程序所用,此外还展示了如何利用各种基于云端的服务存储数据。
Android是作为移动电话的操作系统问世的,第11章展示了如何控制电话通信组件并与其交互,当前大多数移动设备上都有电话通信组件。
在大多数情况下,移动设备一直都在线并且一直都与网络保持连接,这对人们如何使用它们以及如何看待它们有着巨大影响。第12章展示了为传统的联网应用程序编写代码,紧接其后的第13章则讨论了游戏和动画,第14章讨论了社交网络。
现在无处不在的全球定位系统(Global Positioning System, GPS)同样也对移动应用程序如何工作具有重要影响,第15章讨论了如何查找设备的位置、如何从Google和OpenStreetMap获取地图数据,以及应用程序如何以刚刚正在探讨的方式清楚自己的位置。
第16章谈论了内置在大多数Android设备中的传感器以及如何利用它们。
第17章不止讨论了如何把蓝牙耳机连接到手机上,还讨论了蓝牙带来的低功耗近距离网络连接功能。
Android设备在能为开发人员提供多少控制方面可能独一无二,在第18章中探讨了其中的一些观点,因为Android是基于Linux的,所以该章中有几节讨论了传统的Unix/Linux命令和实用工具。
在第19章中,我们讨论了利用其他编程语言编写Android应用程序的全部或部分问题,其中的示例包括C、Perl、Python、Lisp以及其他语言。
尽管本书的原版是英文版,并且英语是全世界使用最广的语言,但它却远不是唯一的语言。大多数最终用户都希望应用程序具有他们母语版本的文本以及对于他们而言具有恰当文化形式的图标。第20章详细讨论了有关语言和文化以及如何将这两者与Android关联起来的话题。
最后,大多数Android开发人员都希望其他人能使用他们的应用程序,但是如果用户找不到这个应用程序就没法用了。第21章展示了如何通过Google Play应用商店发布准备好的应用程序,以及利用Google Play和其他应用市场向将会使用应用程序的人推介应用程序。
本书约定
本书使用如下所示的一些排版约定:
斜体(Italic)
表示新术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
用于程序列表以及在段落里表示程序要素(例如:变量名或函数名、数据库、数据类型、环境变量、语句和关键字)。
等宽粗体(Constant width bold)
显示命令或其他应由用户逐字输入的文本。
等宽斜体(Constant width italic)
显示应被用户提供的值或由上下文决定的值所代替的文本。
该图示表示小贴士或建议。
该图示表示一般性的注意事项。
该图示表示警告或应引起注意之处。
在此处给出我们的第一个警告:特定章节中所用的术语“我”反映的是该章节作者的观点或经验,并不一定是本书编辑的观点或经验。
获取和使用代码示例
本书中的代码示例既有从完整应用程序中摘取出来的若干行代码,也有完整的可运行的应用程序。对于那些只有“几行”代码的示例而言,你不应指望能够就我们所提供的代码进行编译,这几行代码是打算融入到你的应用程序当中的。所有能够编译的示例都归并到了一个GitHub代码库当中,这是获取源代码并保持更新的推荐方式,可以通过https://github.com/IanDarwin/Android-Cookbook-Examples访问这个代码库,代码库中的每个文件夹都包含一个示例程序项目。如果你访问这个网页就会看到,GitHub允许你利用giy clone命令迁出源代码库。同样,网页还为你提供了一个选项,可将整个代码库下载为一个(很大的)ZIP文件,并在网络浏览器中查看代码库的各个部分,使用Git可以让你获取代码修正和更新。
各章节都为源代码提供了下载地址,这些源代码保存在其他的公共代码库当中,对于电子书用户而言,在每个章节的结尾处都列出了这些下载地址的超链接。在每一个案例当中,归档文件都必定包含一个完整的Eclipse或Android Studio项目。我们没有对这些代码库进行控制,如果有人发现其中的示例不完整或无法运行,请参考GitHub代码库。
几乎所有最初针对Eclipse编写的代码示例现在都包含一个build.gradle文件,所以可以在Android Studio中直接打开这些代码示例(参见1.12节)。一般而言,最初用Android Studio编写的代码示例如果不重新组织项目结构,就不能为Eclipse所用。
怎样确定能如何构建一个项目
如果一个项目的顶级目录包含:
AndroidManifest.xml和.project
项目可用Eclipse打开。
build.gradle
项目可用Android Studio打开或用命令行Gradle工具编译。
pom.xml
可用命令行Maven(或用IDE内的Maven)编译。
build.xml
项目或许仍然可用比较老旧的And构建工具编译。
请参见图P-1查看一下典型项目布局的示例。
示例的GitHub代码库的顶级目录当中包含一个README文件,该文件可在文件和文件夹列表的下方看到,它对哪个项目可用哪个工具构建进行了总结。其中要注意Notes一列,因为该列中列出了构建示例项目时随时可能遇到的一些已知的问题。

图P-1:典型的Eclipse和Android Studio项目的项目布局
本书是想帮助你完成工作,总而言之,你可以在自己的程序和文档中使用本书中的代码。除非你复制了代码中非常重要的部分,否则不必联系我们得到许可。例如,编写一个用到了本书所提供的若干代码的程序并不需要得到许可。而销售或发行O扲eilly出版书籍所带示例的CD-ROM必须获得许可。援引本书或示例代码作为例证回答问题不需要得到许可。在你的产品文档中大量引入本书的示例代码必须获得许可。
我们很感谢但并不强求注明出处,注明出处一般包含书名、作者、出版商以及ISBN,例如:“Android Cookbook, Second Edition, by Ian F. Darwin (O扲eilly). Copyright 2017 O扲eilly Media, Inc., 978-1-449-37443-3.”。
如果你感觉自己对代码示例的使用在合理使用或上述许可范围之外,请随时通过邮箱permissions@oreilly.com联系我们。
我们的联系方式
请向出版商提交有关本书的评论和问题:
O扲eilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-0515 (international or local)
707-829-0104 (fax)
我们推出了针对本书的网页,其中列出了勘误表、示例以及附加信息,你可以通过http://bit.ly/android-cookbook-2e访问该网页。
要想就本书发表评论或咨询技术性问题,可请向bookquestions@oreilly.com发送电子邮件。
要想了解更多有关我们的书籍、课程、会议和新闻,请浏览我们的网站http://www.oreilly.com。
可以通过https://facebook.com/oreilly在Facebook上找到我们。
可以通过https://twitter.com/oreillymedia在Twitter上找到我们。
可以通过https://www.youtube.com/oreillymedia在YouTube上观看我们的视频。
致谢
我想感谢来自Android社区的数十位开发人员,他们为本书的第一版贡献了相当多的章节,他们是:Amir Alagic、Jim Blackler、Luis Vitorio Cargnini、Rupesh Chavan、Adrian Cowham、Wagied Davids、Nidhin Jose Davis、David Dawes、Enrique Diaz、Marco Dinacci、Claudio Esperanca、Kurosh Fallahzadeh、Daniel Fowler、Jonathan Fuerth、Sunit Katkar、Roger Kind Kristiansen、Vladimir Kroz、Alex Leffelman、Ulysses Levy、Thomas Manthey、Emaad Manzoor、Zigurd Mednieks、Keith Mendoza、Roberto Calvo Palomino、Federico Paolinelli、Johan Pelgrim、Catarina Reis、Mike Rowehl、Pratik Rupwal、Oscar Salguero、Ashwini Shahapurkar、Shraddha Shravagi、Rachee Singh、Saketkumar Srivastav、Corey Sunwold、Kailuo Wang和Colin Wilcox。
感谢Mike Way,他为第2版贡献了有关访问许可的一节(2.2节),还要感谢Daniel Fowler在第2版中将他所写的章节进行了更新。
我还必须为本书出版做出贡献的O扲eilly工作人员表示感谢,包括我的编辑Mike Loukides、Courtney Nash、Meghan Blanchette和Dawn Schanafelt,还有参与出版工作的Adam Witwer和Sarah Schneider,以及策划编辑Teresa Elsey,她领导了整个出版过程,还有文字编辑Audrey Doyle,他劳心费力地阅读了每个单词和短语,以及Stacie Arellano,他对本书进行了再次校对。还要感谢设计师Karen Montgomery和David Futato以及插图师Robert Romano和Rebecca Demarest以及我可能忽略了没有提到的所有人—你知道我说的是谁!Colleen Lobner、Kim Cofer、Rachel Head和Judith McConville也对本书第2版做出了贡献。
我的小儿子Andrej Darwin在本书第1版的章节编辑阶段帮助我完成了一些后期管理任务,感谢全家的支持。
最后要感谢我的两位技术评审:Greg Ostravich和Zettie Chinfong,尽管本书现在仍然不可避免地有错漏之处,但是如果没有他们,错漏之处就要多得多。不仅如此,他们为了本书的第2版又全都回来了!Rick Isaacs对很多章节又进行了一次评审和测试。还要感谢很多指出第1版首印勘误的读者,特别是Anto Jurkovic和Joseph C. Eddy,这些错误在这一版都得到了改正,但书中肯定尚存一些错误,恳请读者批评指正。
上面我所提到的所有人,感谢你们!

上架指导

计算机\移动开发

封底文字

在230多个经过测试的实用技巧帮助下,你可以投入构建Android应用的工作中。通过本书,你能找到有关用户界面、多点触摸手势、位置感知、Web服务以及电话、相机、加速计等设备功能的解决方案。你还能够得到为Google Play Market包装应用程序的有用步骤。

本书适合于熟悉Java、Android基础知识和Java SE API的开发人员,其内容来自于数十位Android社区的一线开发人员。每节几乎都是先提出问题,然后提供清晰的解决方案和可以马上用于项目中的样例代码。在大量的主题中,本书能够帮助你:
 了解开发和测试Android应用所需的工具
 使用Android UI控件、图形服务和弹出机制创建布局
 在Google Maps和OpenStreetMap上构建位置感知服务
 控制Android的音乐、视频等多媒体功能
 使用加速器和其他Android传感器工作
 使用各种游戏和动画框架
 存储和检索文件和嵌入式数据库中的持久数据
 利用JSON和其他格式访问REST风格的Web服务
 测试单独组件和整个应用程序并排除故障


“本书在这里是为了帮助Android开发人群共享有助于开发出更好的应用程序的知识,那些在本书中贡献出自己知识的人会让Android开发对于后来者更加简单。”
  ——摘自本书前言

作者简介

[美]伊恩 F.达尔文(Ian F. Darwin)著:Ian F. Darwin在计算机行业已经工作了30多年。他编写了用于Linux和BSD的免费文件命令,是《Checking C Programs with Lint》《Java Cookbook》等书的作者并撰写了100多篇有关C、UNIX、Java及Android的文章和教程。除了编程和顾问工作之外,Ian还为世界性的技术培训公司——Learning Tree International服务,讲授UNIX、Java和Android技术。

译者序

近十年来,智能移动设备的发展可以说是一日千里,除了硬件设备之外,手机OS显然是其中的一个重要引擎,而Android无疑是手机OS领域的两大王者之一(另一个是iOS)。尽管几年前人们对Android手机的卡顿现象还时有吐槽,但是随着Android不断的更新换代以及硬件厂商对自己产品的优化,两者在性能方面的差距逐渐缩小,某些旗舰版Android手机的表现已与iPhone相差无几。根据市场分析公司凯度移动发布的数据,2016年Android在中国的市场占有率达到了77.7%,同比增长6%;在欧洲五大市场这个数字为74.5%,同比增长7.1%;即使在iOS的老家美国,Android也拿下了65.5%,同比增长7.3%,可见,Android是移动互联网这个风头正劲的“风口”的一台“强力鼓风机”。而Android与生俱来的移动开放开发平台的特性,也使得作为开发人员的我们更愿意利用它创造出一些有趣的新玩意儿出来。为此,本书为广大希望全面掌握这一“风口”上技术的读者奉上了一场饕餮盛宴。
本书虽厚,但有别于市面上一些满页贴代码的所谓“典藏”“大全”之类的Android书籍。就译者本人在翻译过程中的感受而言,本书有三大特点:内容全面、逻辑顺畅、重点突出。所谓内容全面,是指本书涵盖了Android应用程序开发的方方面面,从GUI、图形图像、多媒体、数据持久化到各种通信方式、常用传感器等内容无所不包,甚至还囊括了应用程序测试、国际化和面向非Java程序员的编程方式等内容,自然应用程序开发环境的搭建和程序的发布也不例外。可以说只要你从事Android开发,无论你打算使用什么IDE、准备开发什么样的项目,都能从本书中找到适合自己的内容;所谓逻辑顺畅,指的是本书的编排别具匠心,几乎每一节都是先提出问题,即该节内容所面向的程序应用背景,然后提出总体解决思路,最后再按步实施、解决问题。为什么、怎么办、如何解决可以说是贯穿全书的逻辑思路,清晰明了,即使你由于时间关系不能精读全书,也总会在实际开发工作中遭遇“痛点”之时,回忆起本书中相同或类似的问题场景,快速找到解决方案;重点突出则是由于本书作者是来自于Android社区的优秀一线开发人员,对Android程序员在日常开发中容易混淆、迷茫、犯错、走弯路的种种问题了然于胸,并对这类问题的解决方案给予了重点“关照”,而对于大家都耳熟能详的步骤,不会一而再、再而三地喋喋不休。本书的这三个特点,使其既能成为Android开发新手的入门读物,又能作为富有经验的开发人员的案头工具书,可以说值得每位Android程序员品读。
全书共有21章,由胡训强、夏红梅和张文娟共同翻译,其中胡训强翻译了第1、2章以及第5~18章,夏红梅翻译了第3章和第4章,张文娟翻译了第19~21章。囿于译者的技术和语言水平,书中难免会出现不准确甚至错误之处,如果你发现了这些问题,恳请通过邮箱10185014@qq.com告知我们以便改进,在此向你表示感谢!
最后,感谢所有为本书顺利付梓而付出艰辛劳动的人们!

译 者
2017年9月于广州

图书目录

前言 1
第1章 入门 9
1.1 理解Android应用程序体系结构 9
1.2 理解Android Activity的生命周期 11
1.3 了解Android发行版本 13
1.4 学习Java语言 15
1.5 从命令行创建“Hello World”应用程序 16
1.6 用Apache Maven创建“Hello World”应用程序 20
1.7 为Android开发选择集成开发环境(IDE) 22
1.8 安装Android Studio 26
1.9 安装Platform Editions并保持SDK更新 28
1.10 用Android Studio创建“Hello World”应用程序 31
1.11 将Eclipse ADT项目转换成Android Studio项目 37
1.12 从Eclipse向Android Studio转换时保留历史记录 40
1.13 用Eclipse和Android Studio共同构建Android应用程序 42
1.14 安装带有AndMore的Eclipse(代替ADT) 44
1.15 用Eclipse创建“Hello World”应用程序 51
1.16 在Eclipse中安装Eclipse Marketplace Client 56
1.17 将项目从Eclipse ADT升级到Eclipse AndMore 59
1.18 用命令行ADB控制模拟器/设备 62
1.19 共享其他Eclipse项目中的Java类 64
1.20 引用库实现外围功能 66
1.21 通过兼容库在老设备上使用新功能 70
1.22 应用SDK示例帮助避免让人头疼的问题 72
1.23 从模拟器/Android设备上截图/截取视频 73
1.24 程序:一个简单的定时器示例 78
1.25 程序:Tipster, Android操作系统上的小费计算器 82
第2章 设计成功的应用程序 98
2.1 异常处理 101
2.2 运行时请求Android访问权限 104
2.3 以“单例”模式访问Android的Application对象 106
2.4 在用户旋转设备时保持数据 109
2.5 监控Android设备上的电池电量 111
2.6 在Android中创建闪屏 112
2.7 设计面向会议/野营/黑客马拉松/公共机构的应用程序 116
2.8 在Android应用程序中使用Google的分析工具 118
2.9 进行首次运行的偏好设置 120
2.10 格式化数字 122
2.11 用正确的复数形式进行格式化 126
2.12 格式化时间和日期进行显示 128
2.13 用Java 8的java.time API简化日期/时间计算 131
2.14 用键盘监听器控制输入 133
2.15 备份Android应用程序数据 136
2.16 用提示(Hint)代替工具小贴士 142
第3章 应用程序测试 144
3.1 针对测试设置Android虚拟设备 145
3.2 在大量设备上进行云测试 151
3.3 用Eclipse和JUnit进行测试 152
3.4 用Android Studio和JUnit进行测试 154
3.5 用Robolectric和JUnit 4进行测试 159
3.6 用ATSL、Espresso和JUnit 4进行测试 161
3.7 排查应用程序崩溃原因 165
3.8 用Log.d( )和LogCat进行调试 168
3.9 用Crash Reporting自动获取崩溃报告 169
3.10 针对现场错误或情况使用本地运行时应用程序日志 172
3.11 为测试重现Activity生命周期场景 176
3.12 利用严苛模式让应用程序保持简洁 180
3.13 用Android Lint进行静态代码测试 181
3.14 用Monkey程序进行动态测试 183
3.15 在AVD之间发送文本消息和通话 185
第4章 进程间/进程内通信 187
4.1 用Intent打开网页、电话号码本或其他应用程序 187
4.2 从视图中用电子邮件发送文本 189
4.3 发送带有附件的电子邮件 192
4.4 用Intent.putExtra( )发送字符串值 194
4.5 从子Activity向主Activity发回数据 195
4.6 当其他应用程序在屏幕上显示的同时让后台服务保持运行 198
4.7 发送/接收广播消息 200
4.8 在设备重启后启动服务 201
4.9 使用线程创建高可响应的应用程序 202
4.10 使用AsyncTask进行后台处理 203
4.11 利用Activity的线程队列和Handler在线程间发送消息 210
4.12 结合Android和HTML/JavaScript创建一个万年历应用程序 211
第5章 图形 218
5.1 使用自定义字体 218
5.2 用OpenGL ES绘制旋转正方体 221
5.3 为OpenGL旋转正方体添加控制 224
5.4 手绘光滑曲线 227
5.5 用Intent拍照 232
5.6 用android.media.Camera照相 234
5.7 用Google的条形码扫描器ZXing扫描条形码和二维码 238
5.8 用AndroidPlot显示图表和图形 240
5.9 使用Inkscape借助OpenClipArt.org创建Android启动器图标 244
5.10 使用Paint.NET借助OpenClipArt.org创建Android启动器图标 248
5.11 使用九宫格文件 254
5.12 使用Android RGraph创建HTML5图表 258
5.13 添加一个简单的光栅动画 262
5.14 用拇指和食指进行缩放 265
第6章 图形用户界面 268
6.1 理解和遵循用户界面准则 269
6.2 用原质化设计赋予应用程序良好外观 270
6.3 选择布局管理器(ViewGroup)排列组件 274
6.4 通过解耦视图与模型处理配置变化 275
6.5 处理动作栏 277
6.6 向动作栏添加共享动作 281
6.7 用Fragment API构建现代UI 285
6.8 创建按钮及其单击事件监听器 289
6.9 用图像按钮增强UI设计 290
6.10 使用FloatingActionButton 291
6.11 以多种不同方式编写事件监听器 294
6.12 使用复选框和单选按钮 298
6.13 使用卡片窗口部件 302
6.14 通过Spinner类提供下拉选择器 304
6.15 处理长按/长点事件 307
6.16 用TextView和EditText显示文本域 308
6.17 用属性和TextWatcher接口限制EditText的值 309
6.18 实现AutoCompleteTextView 311
6.19 使用SQLite数据库查询填充AutoCompleteTextView 313
6.20 将文本域转换为密码域 315
6.21 将软键盘上的回车键改为“下一个” 315
6.22 在Activity中处理键盘按键事件 318
6.23 让他们看星星:使用RatingBar 319
6.24 让视图晃动 323
6.25 提供触觉反馈 325
6.26 在TabView中的各个Activity之间切换 328
6.27 创建在两个Activity之间显示的载入界面 329
6.28 为布局添加带有圆角的边框 331
6.29 在Android中检测手势 333
6.30 创建一个简单的应用程序窗口小部件 340
第7章 GUI中的警告:菜单、对话框、Toast、
Snackbar和通知 344
7.1 用Toast和Snackbar向用户发出警告 344
7.2 自定义Toast的外观 346
7.3 创建和显示菜单 348
7.4 处理菜单项的选择 349
7.5 创建子菜单 350
7.6 创建弹出式/警告对话框 352
7.7 创建时间选择器窗口部件 353
7.8 针对选择创建iPhone风格的滚轮选择器 356
7.9 创建选项卡式对话框 358
7.10 创建进度对话框 361
7.11 创建带有按钮、图像和文本的自定义对话框 362
7.12 创建可重用的“关于对话框”类 364
7.13 在状态栏中创建通知 368
第8章 其他GUI组件:列表和视图 373
8.1 用RecyclerView构建基于列表的应用程序 373
8.2 用ListView构建基于列表的应用程序 376
8.3 为ListView创建“无数据”视图 381
8.4 创建带有图像和文本的高级ListView 382
8.5 在ListView中使用分组标题 386
8.6 让ListView始终处于用户的关注点上 390
8.7 编写自定义列表适配器 391
8.8 利用SearchView在ListView中查找数据 394
8.9 处理方向变化:从ListView数据值到全局模式中的图表绘制 396
第9章 多媒体 402
9.1 播放YouTube视频 402
9.2 利用MediaRecorder录制视频 403
9.3 使用Android的人脸检测功能 406
9.4 播放音频文件 409
9.5 在没有交互的情况下播放音频 411
9.6 使用语音文本转换 412
9.7 利用文本语音转换让设备发声 414
第10章 数据持久化 416
10.1 读写内存储器和外存储器中的文件 416
10.2 获取文件和文件夹信息 421
10.3 读取应用程序自带而非文件系统中的文件 426
10.4 获取SD卡的存储空间信息 427
10.5 提供偏好设置Activity 428
10.6 检查共享偏好设置的一致性 433
10.7 在Android应用程序中使用SQLite数据库 435
10.8 在SQLite数据库上执行高级文本检索 438
10.9 处理SQLite中的日期 443
10.10 将非SQL数据对外暴露为SQL游标 445
10.11 用CursorLoader显示数据 448
10.12 利用JSONObject解析JSON 451
10.13 利用DOM API解析XML文档 453
10.14 利用ContentProvider存储和获取数据 455
10.15 编写一个ContentProvider 456
10.16 通过联系人内容提供器添加联系人 460
10.17 利用ContentProvider读取联系人数据 462
10.18 实现拖放 464
10.19 通过FileProvider共享文件 468
10.20 利用SyncAdapter把SQLite中的数据备份到云端 473
10.21 利用Google Firebase将数据存放到云端 482
第11章 电话应用程序 487
11.1 来电处理 487
11.2 处理去电呼叫 490
11.3 拨打电话 494
11.4 发送单段式或多段式短信 495
11.5 接收短信 498
11.6 利用模拟器控制台向模拟器发送短信 499
11.7 利用Android的TelephonyManager获取设备信息 500
第12章 网络应用程序 511
12.1 借助URLConnection利用RESTful Web服务 512
12.2 借助Volley利用RESTful Web服务 515
12.3 利用Google Cloud Messaging的“推送消息”向应用程序发出
通知消息 517
12.4 利用正则表达式从非结构化文本中提取信息 525
12.5 利用ROME解析RSS/Atom订阅内容 526
12.6 利用MD5加密纯文本 531
12.7 将文本转换为超链接 531
12.8 利用WebView访问网页 532
12.9 自定义WebView 533
12.10 编写进程间通信服务 534
第13章 游戏和动画 539
13.1 利用flixel-gdx制作Android游戏 540
13.2 利用AndEngine制作Android游戏 544
13.3 处理与时间相关的键盘输入 549
第14章 社交网络 551
14.1 利用OAUTH2对用户进行身份认证 551
14.2 利用HTTP集成社交网络 555
14.3 利用HTML或JSON加载用户的Twitter时间线 557
第15章 定位和地图应用程序 559
15.1 获取位置信息 559
15.2 在应用程序内获取GPS信息 561
15.3 在设备上模拟GPS坐标 563
15.4 使用地理编码和逆向地理编码 565
15.5 为使用Google Maps API V2进行开发做好准备 566
15.6 使用Google Maps API V2 571
15.7 利用OpenStreetMap显示地图数据 576
15.8 利用OpenStreetMap地图创建覆盖图层 578
15.9 在OpenStreetMap地图上使用比例尺 581
15.10 在OpenStreetMap覆盖图层上处理触摸事件 582
15.11 利用OpenStreetMap获取定位更新 584
第16章 加速计 588
16.1 检查传感器是否存在 588
16.2 利用加速计检测晃动 589
16.3 检测设备正面朝上还是朝下 593
16.4 读取温度传感器 594
第17章 蓝牙 595
17.1 启用蓝牙并让设备可被发现 595
17.2 连接启用了蓝牙的设备 597
17.3 接受来自蓝牙设备的连接 599
17.4 实现发现蓝牙设备的功能 600
第18章 系统和设备控制 602
18.1 获取手机的网络/连接信息 602
18.2 从应用程序清单文件中获取信息 603
18.3 将来电通知改为静音、振动或普通铃声 604
18.4 复制文本并从剪切板中获取文本 606
18.5 使用基于LED的通知 606
18.6 让设备振动 607
18.7 确定指定的应用程序是否正在运行 608
第19章 世上并非只有Java:其他编程语言和框架 609
19.1 了解跨平台解决方案 610
19.2 在应用程序中执行Shell命令 611
19.3 利用JNI在NDK上运行原生C/C++代码 613
19.4 Android脚本编程层SL4A入门 618
19.5 在SL4A中创建警告消息 620
19.6 利用SL4A获取Google文档并在ListView中显示 624
19.7 在二维码中共享SL4A脚本 626
19.8 通过JavaScript在WebView中使用原生的手机功能 628
19.9 利用Xamarin构建跨平台应用程序 630
19.10 利用PhoneGap/Cordova构建跨平台应用程序 634
第20章 世上并非只有英语:字符串和国际化 639
20.1 国际化应用程序中的文本 640
20.2 查找和翻译字符串 643
20.3 处理strings.xml中的细微差别 644
第21章 打包、部署及发布/出售应用程序 650
21.1 创建签名证书并用其对应用程序签名 650
21.2 通过Google Play应用商店发布应用程序 653
21.3 通过其他应用商店发布应用程序 655
21.4 利用AdMob让你的应用程序赚钱 656
21.5 利用ProGuard进行混淆和优化 662
21.6 让应用程序驻留在你自己的服务器上 664
21.7 创建“自行更新”的应用程序 666
21.8 为Google Play应用商店中其他已发布的应用程序提供链接 668

教学资源推荐
作者: [美]詹姆斯·高斯林(James Gosling), 比尔·乔伊(Bill Joy), 盖·斯蒂尔(Guy Steele),吉拉德·布拉查(Gilad Bracha), 亚历克斯·巴克利(Alex Buckley) 著
作者: (美)Daniel M. Bikel, Imed Zitouni 编
参考读物推荐
作者: 王院峰; 陈静
作者: [美]杰夫·苏哈伊(Jeff Szuhay) 著
作者: (美)Al Kelley, Ira Pohl 著