前 言 对移动开发人员来说,现在是一个令人心潮澎湃的时代。手机从来没有像今天这样流行,强大的智能手机产品已经为消费者所普遍接受。现在,外观时尚且用途广泛的手机带有GPS、加速计和触摸屏等硬件功能,并且具有固定费率且定价合理的数据计划,因此,它们成为了吸引越来越多的开发者创建各种新颖有趣的移动应用程序的平台。 现在,市面上有大量的Android设备可供消费者选择,包括带有QVGA屏幕的手机和诸如Motorola Droid及Google Nexus One这样强大的WVGA设备,但是真正的赢家却是开发人员。由于现有的手机应用程序的开发是构建在各手机厂家的私有操作系统之上的,所以它限制了第三方应用程序的开发和部署,而Android为我们提供了一个开放的平台。因为没有了人为制造的障碍,所以Android开发人员可以自由地编写能够充分利用日益强大的手机硬件的应用程序,并在一个开放的市场上销售它们。 因此,随着移动设备的销售量不断增长,开发者对Android设备的兴趣也出现了爆炸性地增长。在2009年和2010年前半年,包括HTC、Motorola、LG、Samsung和Sony Ericsson在内的OEM发布了超过20种Android手机。超过26个国家的32家以上的运营商都提供了Android设备。美国的4家主要运营商T-Mobile、Verizon、AT&T和Sprint,都销售Android设备。另外,现在也可以从Google直接购买解锁后的Google Nexus One手机,网址为。 由于Android构建在开源代码的框架之上,并且提供了强大的SDK库和开放的理念,所以它为广大的没有任何移动应用程序开发经验的新手开辟了一条开发完美移动应用程序的康庄大道。而富有经验的移动开发人员现在也可以方便地扩展到Android平台上来,利用它独特的功能来改进现有产品或者开发其他新颖产品。 通过使用Android Market,开发人员可以利用开放的市场向所有兼容的Android设备发布免费或者收费的应用程序,而不需要经历审查过程。 本书将指导你使用Android 2软件开发包来构建移动应用程序。每章的讲解将通过一系列示例项目帮助你逐步掌握Android中的各种新功能和技术,以便你能够最大程度地利用Android。本书所介绍的各个应用实例简明扼要且极具实用价值,它们覆盖了Android 2的所有基本功能和高级功能。 Google的理念是尽快发布,然后不断更新。自从2008年10月Android第一次完整发布以来,共推出了7个平台和SDK版本。由于发布周期如此之快,软件和开发库很可能会有定期的修改和丰富。虽然Android的开发团队会尽可能地保持向后兼容性,但在未来的版本中,本书提供的某些信息仍可能会过时。 尽管如此,本书的内容和示例提供了如何使用当前SDK来编写优秀的移动应用程序所需要的基础知识,同时也保持了快速适应未来版本更强大功能的灵活性。 0.1 读者对象 本书适合所有对使用Android SDK在Android移动手机平台上创建应用程序感兴趣的人。不管是经验丰富的移动开发人员,还是想通过Android开发移动应用程序的新手,能够从本书中获得十分有价值的信息。 如果读者使用过手机(特别是运行Android的手机),那么这些使用经验会对阅读本书有所帮助,但这不是必需的。同样,如果以前有过手机开发经验,那么也有一定的帮助,但这也不是必需的。不过希望读者应该具有一定的软件开发经验,并且熟悉基本的开发实践。了解一些Java知识很有帮助,但也不是必需的。 第1章和第2章将简要介绍移动应用程序开发过程,并包含了如何在Android上开始开发的说明。除了这两章之外,对其他章节的阅读顺序不做要求。但如果对第3~7章中描述的基本组件有所理解,将有利于你对其他章节的学习。第8~15章讨论了各种可选功能和高级功能,你可以按照任意顺序阅读,也可以按需阅读。 0.2 本书内容 第1章简要介绍Android,包括它是什么,以及它如何适应当前的移动开发。然后详细讲述了Android作为一个开发平台能够提供什么功能,并解释了它为什么是一个创建移动应用程序的良机。 第2章讲述了移动开发的一些最佳实践,并解释了如何下载Android SDK和开始开发应用程序。该章同时也介绍了Android开发工具,并说明了如何从头创建新的应用程序。 第3~7章深入探讨了基本的Android应用程序组件。首先讲述了组成Android应用程序和它的生命周期的每个部分,在介绍活动及其生存期与生命周期之前,将简要介绍应用程序清单和外部资源。 之后将学习如何使用布局和视图创建用户界面,并且还将了解在应用程序组件之间执行动作和发送消息的意图机制。接着将介绍Internet资源,之后详细讲述了数据存储、检索和共享。读者在此将了解首选项保存机制、文件处理和数据库。在这个部分的最后还讲解如何使用内容提供器来共享应用程序数据。 第8~14章涉及到较高级的主题。首先介绍了地图以及基于位置的服务,接着介绍了服务、后台线程和通知的用法。 接着介绍了如何使用小组件、Live Folder、Live Wallpaper和快速搜索框,使你的应用程序通过主屏幕与用户直接交互。在介绍了播放和录制多媒体以及使用摄像头以后,你将了解到Android的通信功能。 然后将介绍电话服务API和用来发送及接收SMS消息的API,还会讨论蓝牙和网络管理(包括Wi-Fi和移动数据连接)。 第14章讨论传感器API,并演示了如何使用指南针、加速计和其他硬件传感器来使应用程序对外界环境作出反应。 第15章介绍几个高级开发主题,其中包括安全、IPC、高级图像技术以及用户与硬件的交互。 0.3 本书结构 本书按照一种合理的顺序进行组织,从而帮助具有不同开发背景的读者更好地学习编写高级Android应用程序的方法。 尽管对阅读每个章节的顺序不做要求,但是请注意,某些示例项目是跨越多个章节开发的,在其中每个阶段都会添加一些新功能并做一些改进。 富有移动开发经验且拥有能正常工作的Android开发环境的开发人员可以跳过前两章的内容--这两章简要介绍了移动开发的基本知识以及如何创建开发环境--直接学习第3~7章。因为这几章涵盖了Android开发的基础知识,所以深入理解这几章所讲述的概念非常重要。在学习这几章之后,读者就可以继续学习其余章节了,它们主要介绍了地图、基于位置的服务、后台应用程序以及诸如硬件交互和联网这样的更高级主题。 0.4 使用本书的要求 要使用本书中的示例代码,你需要通过下载Android SDK库和开发工具以及Java开发包,来创建一个Android开发环境。你可能还希望通过下载和安装Eclipse和Android开发人员工具插件来简化开发工作,但是这些都不是必需的。 Windows、Mac OS和Linux系统环境都支持Android开发,可以从Android站点下载相应的SDK。 要使用本书或者开发Android应用程序,你并不需要Android设备。 0.5 源代码 读者在学习本书中的示例时,既可以手工输入所有代码,也可以使用本书附带的源代码文件。本书使用的所有源代码都可以从本书合作站点/或www.tupwk. Com.cn/downpage上下载。只要登录到站点/,使用Search工具或使用书名列表就可以找到本书。接着单击本书细目页面上的Download Code链接,就可以获得所有源代码。 下载了代码后,只需用自己喜欢的解压缩软件对它进行解压缩即可。另外,也可以进入/dynamic/books/download.aspx上的Wrox代码下载主页,查看本书和其他Wrox图书的所有代码。 0.6 勘误表 尽管我们已经尽了最大的努力来保证文章或代码中不出现错误,但是错误总是难免的,如果你在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免走入误区,当然,这还有助于提供更高质量的信息。 要在网站上找到本书英文版的勘误表,可以登录,通过Search工具或书名列表查找本书,然后在本书的细目页面上,单击Book Errata链接。在这个页面上可以查看到Wrox编辑已提交和粘贴的所有勘误项。完整的图书列表还包括每本书的勘误表,网址是/misc-pages/booklist.shtml。 如果你在勘误表上没有找到错误,那么可以到/contact/techsupport.shtml上,完成上面的表格,并把找到的错误发送给我们。我们将会核查这些信息,如果无误的话,会把它放置到本书的勘误表中,并在本书的后续版本中更正这些问题。 0.7 要与作者和同行讨论,请加入上的P2P论坛。这个论坛是一个基于Web的系统,便于你发布与Wrox图书相关的消息和相关技术,与其他读者和技术用户交流心得。该论坛提供了订阅功能,当论坛上有新的消息时,它可以给你传送感兴趣的论题。Wrox作者、编辑和其他业界专家和读者都会到这个论坛上来探讨问题。 在上,有许多不同的论坛,它们不仅有助于阅读本书,还有助于开发自己的应用程序。要加入论坛,可以遵循下面的步骤: (1) 进入,单击Register链接。 (2) 阅读使用协议,并单击Agree按钮。 (3) 填写加入该论坛所需要的信息和自己希望提供的其他信息,并单击Submit按钮。 (4) 你会收到一封电子邮件,其中的信息描述了如何验证账户和完成加入过程。 加入论坛后,就可以发布新消息,回复其他用户发布的消息。可以随时在Web上阅读消息。如果要让该网站给自己发送特定论坛中的消息,可以单击论坛列表中该论坛名旁边的Subscribe to this Forum图标。 关于使用Wrox P2P的更多信息,可阅读P2P FAQ,了解论坛软件的工作情况以及P2P和Wrox图书的许多常见问题。要阅读FAQ,可以在任意P2P页面上单击FAQ链接。