深入理解Android网络编程:技术详解与最佳实践(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-06 14:39:17

点击下载

作者:陈文,郭依正

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

深入理解Android网络编程:技术详解与最佳实践

深入理解Android网络编程:技术详解与最佳实践试读:

前言

/为什么要写这本书

随着Android平台市场占有率的稳步上升,Android应用的数量和种类越来越多,涉及的范围也越来越大。从单机应用发展到联网应用,再到云端体系,其发挥的作用越来越重要。

Android移动开发领域正处在一个转折点:移动用户的需求日益增长,他们希望在移动终端上拥有一个永远在线的个人管理中心;开发者希望手机成为互联网移动终端,以扩展互联网应用的广度和深度;企业希望在手机平台上实现更多的管理和应用,随时随地保持沟通,进而使企业低成本、高效率地运营。这些需求更多地表现在Android的互联网应用方面,其技术核心正是Android网络编程的相关知识。

不断扩展网络相关应用是Android平台的主要方向,Android网络编程不但能够实现信息的实时交互、在线存储和计算等基础应用,甚至可以实现移动办公、电子商务等复杂逻辑,进而实现无处不在的移动应用。Android开发者们了解Android网络编程相关的知识,将能更加快速高效地编写Android网络应用。通过本书能和大家一起来分享和探讨这些内容,笔者自觉是一件非常有意义的事情。读者对象

本书适合于以下读者阅读:

●Android移动互联网开发者;

●希望了解Android网络编程,利用Android平台实现网络应用的个人;

●开设相关课程的大专院校师生及科研工作者。如何阅读本书

全书共分为三个部分。

第一部分为概述篇,即第1章,这部分在简介了Android开发平台后,重点讲解了Android网络程序的功能及开发环境的配置,引导读者走进Android网络编程的大门。

第二部分为实战篇,包括第2章到第8章,这部分介绍了基本的网络协议TCP、UDP、HTTP等在Android上的应用;讲解了使用Android处理JSON、SOAP、HTML、XML等数据的方法,同时讲解了Android中的RSS编程、Email编程、OAuth认证等;解析了Android中Locations、Maps、USB、Wi-Fi、Bluetooth、NFC等网络模块的编程;讨论了Android中线程、数据存取、消息缓存、界面更新等的处理方法;探讨了SIP、XMPP等协议在Android上的应用。

第三部分为源码分析篇,包括第9章到第11章,这部分分析了Android中与HTML处理、网络处理以及部分网络应用相关的源码。读者通过阅读这部分内容,可以进一步加深对相关知识点的理解。

以下是各章内容的分述:

第1章:认识Android和Android网络程序的工作原理,简单介绍Android的发展、功能特性、系统构架,重点讲解Android网络编程和设置Android开发环境,探讨用Android编写网络程序的一般步骤并给出简单的Android网络编程的实践案例。

第2章:介绍支撑Internet的TCP/IP网络模型,重点讨论其中的TCP、UDP协议,讲解基于TCP及UDP协议的Socket编程,并通过聊天程序、FTP客户端及Telnet客户端等案例讲解Socket编程的实践方法。

第3章:介绍HTTP协议,讨论如何使用Android处理JSON、SOAP、HTML。案例部分给出了基于HTTP协议的文件上传、使用HttpClient和URLConnection访问维基百科、JSON解析wikipedia内容、SOAP解析天气服务及Android自定义打开HTML页面等内容。

第4章:介绍Android解析XML文件的三种方式,即DOM、SAX、PULL,讨论Android中RSS编程、Email编程等,同时还介绍与Android安全相关的知识,重点讲解Android加密解密及OAuth认证。

第5章:介绍Android中常用的网络编程组件,包括解析Locations、Maps、USB、Wi-Fi、Bluetooth等重要通信接口在Android上的使用方法,并结合具体案例介绍这些接口的一般使用方法。

第6章:介绍Android线程机制以及数据存取、消息缓存、UI同步的方法。在线程部分重点讲解利用AsyncTask实现Android多线程应用开发;在数据存取部分介绍Shared Preferences、Internal Storage、External Storage、SQLite Database及Network Connection等5种存储永久性应用程序数据的方法;在消息缓存部分介绍Android本地存储的缓存机制;在UI同步部分讲解了在加载数据前、刷新数据时、完成任务时更新界面的方法。

第7章:介绍如何使用SIP协议构建VoIP应用。详细阐述了使用Brekeke SIP Server搭建SIP服务器的方法,从设置应用程序的权限到初始化和监听SIP通话,逐步介绍Android中实现SIP通话的一般步骤。

第8章:介绍如何使用XMPP协议在Android上建立即时通信应用。包括如何使用Openfire搭建XMPP服务器,客户端如何使用Asmack登录服务器。

第9章:分析Android中与HTML处理相关的源码。重点讲解WebView对HTML文档的处理,涉及WebView加载入口的分析及在WebView中如何调用JavaScript等。同时解析WebKit内核,分析WebKit下一些比较重要的类。

第10章:分析Android中与网络处理相关的源码。重点分析Android网络处理的流程,包括网络状态监控、网络认证、DHCP处理、网络代理等相关内容。此外,介绍AndroidHttpClient及SSL认证,分析与RTP协议和SIP协议相关的源码。

第11章:分析Android中部分与网络应用相关的源码。重点分析Android中使用SAX方式解析XML时如何发现XML根元素与子元素,讲解Android中如何实现基于位置的服务,同时简介媒体传输协议(MTP)的概念,对MTP设备、MTP设备上的对象与存储单元等进行具体分析。

本书内容涉及面广、知识点多,案例部分包括现实中网络开发经常遇到的问题。我们不期望读者通过这一本书就能全面掌握Android的网络编程,但是如果读者能够耐心地从头到尾多读几遍,相信您一定有所收获。如果我们的书能对您有所启迪,我们再辛苦地写作也是值得的。勘误和支持

除了陈文和郭依正之外,翟旭军、郭里城、潘道远、周巧扣、章莉、陈海光等也参与了资料的整理和示例的收集等工作。书中源代码大多都是一些代码片段,笔者认为提供电子版下载意义不大,故未专门设置下载链接,若有读者需要可发邮件至book@chenwen.org,笔者会逐一回复,提供所需相应电子版源代码。由于作者的水平有限,加之编写时间仓促,书中难免会出现不足和错误之处,恳请广大读者批评指正。如果您有什么宝贵意见,欢迎您发送邮件至我的邮箱或者到我的博客(http://chenwen.org)上和我一起探讨,期待能够得到你们的真挚反馈。致谢

首先要感谢Android,没有开源的Android系统就没有现在如此丰富的移动网络生活,当然也就没有这本书。

感谢和我一起编写本书的南京师范大学泰州学院的郭依正老师,全书内容是我们共同的劳动结晶,他丰富的教学经验和严谨的写作风格使我受益匪浅。

感谢在我编程成长中每一位给我力量的朋友:陈亚必、张怀锋、程晓节、李国财、曾旭、孙明坤、孙正然、朱鹏飞、张家荣、曹文、何伟伟、高志立、罗衎、于勇、刘伟、耿飙、梁成全、王超、王军、顾同跃、贺强、周亮、尤慧丽等,以及名单之外的更多热爱Android的朋友们,感谢你们对我的启发和帮助。感谢苗忠良老师的引荐,在您的努力下才促成了这本书的合作与出版。

我要特别感谢机械工业出版社华章公司的编辑杨福川老师和孙亮海老师,在这一年多的时间中是你们始终支持着我们的写作,你们的鼓励和帮助引导我们顺利完成了全部书稿。

感谢我亲爱的兄弟姐妹:郑琴、郑邮生、万骞谦、陈莉、戴亚,感谢你们陪伴我一同成长,为我平淡的生活增添了无尽的色彩。

最后感谢我的父亲陈新明、母亲郑秀兰,感谢你们赋予我生命,将我培养成人,并给我最好的帮助。

谨以此书献给我最亲爱的家人,以及众多热爱Android的朋友们!陈文第一篇概述篇本部分内容:●Android网络编程概要|第1章|Android网络编程概要

今天,Android上使用网络的应用越来越多,如电子邮件、Web浏览器和IM等传统的应用都是基于网络的程序;微博、微信等大量的新兴应用都是在网络的基础上开发的;音乐播放器、词典等传统的本地应用,在加入在线存储功能、在线推荐、分享等功能后也成为网络应用。

随着Android的发展,其对网络编程的支持也日益强大。Android系统的功能已经远远超过了普通通信手机的功能,更像是有手机功能的PC。Android网络编程将会变得更加简洁和广泛:一方面Android的开源和强大的开发框架大大简化了网络应用的编程;另一方面众多网络服务提供商的开放API也对网络编程提供了极大的便利。

在用Android编写网络程序的时候,需要了解一些Android开发的基础知识。本章将概述Android的发展,讨论Android网络程序的功能,设置Android开发环境。本章最后将用实战案例来具体分析Android网络编程的步骤。1.1 Android简介1.1.1 Android的发展

Android纪元正式开始于2008年10月22日。这天,T-Mobile G1正式在美国公开发售。时至今日,Android平台集成了操作系统、中间件、用户界面和应用软件,已经成为开放和完整的移动生态系统,可谓发展飞速。

目前移动终端市场上,随着Android平台的发展以及不断完善,越来越多的厂商开始选择Android系统作为其主要发展方向,自2008年9月Android系统的第一个版本发布至今,Android系统在手机市场大放异彩,已经长期占据市场份额第一的位置。就目前来说,Android手机的统治地位还是无可动摇的。Android 4.0版本发布以来已渐成主力,推动Android手机和平板的份额不断提高,同时也为Android系统“碎片化”的问题提供了可靠的解决方案。

Android系统能够取得今天的成功,最主要的应归功于其开源及免费性。正是在其开源和免费的基础上,各大厂商纷纷在原生系统的基础上进行定制和扩展,植入自身的应用,开发出更多有特色的产品,来满足市场的需求。这种情况在促进全球智能手机产业发展的同时,也使得Android系统的覆盖面积更为广阔。

Android的开源,对于厂家来说可以更好地集成自己的产品和服务;开发者更可以在其开源的基础上进行进一步开发,提供更好的应用;用户能用到免费的Android系统和众多的应用。

目前采用了Android系统的主要的大手机厂商包括:HTC、联想、华为、中兴、魅族、小米、酷派、天语、华硕、OPPO、三星、摩托罗拉、索尼、LG和夏普等。Android已经成为互联网的重要入口和载体。很多互联网企业开始在Android系统上发力,360、盛大、百度、阿里巴巴和网易等互联网巨头,均开始致力于千元左右的智能手机的开发。

Android的未来充满了活力,将给人们的生活带来更加深刻的变革。Google在Android移动平台的基础上推出云音乐服务和电影服务,并与电子书服务相结合,提供更为全面的内容资源。Android TV借助各种应用和游戏,变身成为客厅多媒体娱乐中心的理想将成为现实。Android开放式配件标准包括第三方配件的硬件设计和系统API。第三方配件将会层出不穷,届时这些配件均可得到Android设备的兼容支持。未来将会有更多的智能设备出现,比如Android音箱、闹钟,甚至电饭锅、电冰箱等。如果有大量的Android第三方配件出现,基于Android的家庭自动化则可以让整个家庭生活都会更方便、更欢乐。1.1.2 Android功能特性

Android系统在其开放性的基础上,引入了很多由软件和硬件实现的实用功能,在方便人们使用的同时,也给了开发者广阔的空间。下面是其中的一些重要的功能特性。

■数据存储。Android提供了SharedPreferences、ContentProvider、文件、SQLite数据库和网络等多种方式来存储数据。

■通信网络。Android操作系统支持所有的网络格式,包括GSM/EDGE、IDEN、CDMA、EV-DO、UMTS、Bluetooth、Wi-Fi、LTE、NFC和WiMAX等。

■信息。Android操作系统原生支持短信和邮件,并且支持所有的云端信息和服务器信息。

■语言。Android操作系统支持多语言。

■浏览器。Android操作系统中内置的网页浏览器基于WebKit内核,并且采用了Chrome V8引擎。在Android 4.0内置的浏览器测试中,HTML5和Acid3故障处理中均获得了满分。

■支持Java。虽然Android操作系统中的应用程序大部分都是由Java编写的,但是Android却需要转换为Dalvik执行文件,在Dalvik虚拟机上运行。由于Android中并不自带Java虚拟机,因此无法直接运行Java程序。不过Android平台上提供了多个Java虚拟机供用户下载使用,安装了Java虚拟机的Android系统可以运行J2ME的程序。

■多媒体。Android操作系统本身支持以下格式的音频/视频/图片媒体:WebM、H.263、H.264(in 3GP or MP4 container)、MPEG-4 SP、AMR,AMR-WB(in 3GP container)、AAC、HE-AAC(in MP4 or 3GP container)、MP3、MIDI、Ogg Vorbis、FLAC、WAV、JPEG、PNG、GIF、BMP。

■流媒体。Android操作系统支持RTP/RTSP(3GPP PSS,ISMA)的流媒体以及(HTML5<video>)的流媒体,在安装了RealPlayer之后,还支持苹果公司的流媒体。

■外围设备。Android操作系统支持识别并且使用视频/照片摄像头、多点电容/电阻触摸屏、GPS、加速计、陀螺仪、气压计、磁强计、键盘、鼠标、U盘、专用的游戏控制器、体感控制器、游戏手柄、蓝牙设备、无线设备、感应和压力传感器、温度计、2D和3D图形加速等。

■多点触控。Android内核支持原生的多点触摸。

■多任务处理。Android操作系统支持原生的多任务处理。

■语音功能。除了支持普通的电话通话之外,Android操作系统从最初版本就支持使用语音进行网页搜索等功能。而从Android 2.2开始,语音还可以用来输入文本、实现语音导航等功能。

■无线共享功能。Android操作系统支持用户使用本机充当无线路由器,并且将本机的网络共享给其他手机,其他机器只需要通过WiFi寻找到共享的无线热点,就可以上网。

■截图功能。从Android 4.0版本开始,Android操作系统便支持截图功能,该功能允许用户直接抓取手机屏幕上的任何画面,用户可以通过编辑功能对截图进行处理,还可以通过蓝牙、Email、微博等方式共享给其他用户或者上传到网络上,也可以复制到计算机中。

■Google Now。Google Now是Android 4.1的一个新功能,这个功能可以根据搜索历史或者日历以及其他更多数据来预测出用户想要的到底是什么,并在指定的时间或者地点进行搜索并提出反馈建议。比如当用户有一个新的日历预约,Google将利用各种信息(交通数据、地图、公交换乘)来帮助用户准时到达预约地点;如果用户搜索了一个航班信息,Google将会持续通知这个航班的动态更新;甚至还可以跟踪一个球队的表现情况。

■Android Beam功能。Android Beam优化了近场通信以及蓝牙分享功能。

■Smart App Updates。Smart App Updates是一种智能型的应用更新模式,应用程序在更新时不需要下载整个APK,只需要下载修改的部分即可,这样更节省流量。1.1.3 Android系统构架

Android不仅仅局限于操作系统,Android平台由操作系统、中间件、用户友好的界面和应用软件组成。Android核心是经过Google剪裁和调优的Linux Kernel,对于掌上设备的硬件提供了优良的支持;在Dalvik虚拟机上,大部分Java核心类库都已经可以直接运行;拥有大量立即可用的类库和应用软件,可以轻易开发出可媲美桌面应用复杂度的手机软件;基于Android,Google已经开发大量好的应用软件,同时可以直接使用Google很多的在线服务;Google还提供了基于Eclipse的完整开发环境、模拟器、文档、帮助和示例。

Android系统框图如图1-1所示。可以看出Android分为5层,从低到高分别是Linux Kernel内核层、Android系统库、Android运行时、应用程序框架层和应用层。图 1-1 Android系统框图

■Linux Kernel内核层。Linux内核层是硬件和软件层之间的抽象层。其包含了显示驱动、摄像头驱动、蓝牙驱动、闪存驱动、IPC管道通讯驱动、USB驱动、键盘驱动、Wi-Fi无线驱动、音频驱动和电源管理驱动。最下层是Linux系统核心驱动,主要用于协调CPU处理和内存管理。

■Android系统库。Android包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架提供给开发者。其核心库包含:SurfaceManager显示系统管理库,负责把2D或3D内容显示到屏幕;Media Framework媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQLite数据库引擎、OpenGL ES图形引擎、FreeType位图和矢量字体渲染引擎、Webkit浏览器引擎、SGL基本的2D图形引擎、SSL安全套接字层引擎、Libc库以及Android Dalvik虚拟机运行库。

■Android运行时。Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。Dalvik被设计成在一个设备可以高效地运行的多个虚拟机,每一个Android应用程序都在它自己的进程中运行,也就是都有一个属于自己的Dalvik虚拟机。这可以让系统在运行时可以优化,从而使程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。Dalvik虚拟机依赖于Linux内核提供基本功能,如线程和底层内存管理。

■应用程序框架层。应用程序框架层简化了程序开发的架构设计,开发者可以完全使用核心应用程序所使用的框架接口,任何应用程序都能发布它的功能,且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。应用程序框架层主要是系统管理类库,包括Activity管理、窗口管理、内容提供、显示系统基类、消息通知管理、程序包管理、电话管理、资源管理和定位管理。

■应用层。Android应用层包含核心应用程序,如Home桌面、Contacts联系人、Phone拨打电话、Browser浏览器等,开发者的大部分应用也在这一层。1.2 Android网络程序的功能

Android的网络程序大大增强了简单程序的功能。通过网络,一个程序可以和成千上万的人进行通信;可以获取世界上联网计算机中存储的信息;可以利用许多计算机的能力来解决一个问题。

Android网络应用程序最基本的形式是作为应用客户端。Android客户端获取服务器的数据并显示。比较复杂的Android网络应用还会对获取的数据进行处理,不断更新数据,向他人和计算机发送数据以实现实时交互。较少的Android网络程序将Android作为服务器来使用,这是Android网络应用程序的另外一种形式,比如作为家庭多媒体中心,为其他设备提供信息服务。Android平台具有的开放特点和其高度集成的开发框架,使其成为个人移动中心、家庭媒体中心,也必将使其在企业应用上大展身手。1.2.1 通信功能

电话、短信等传统应用在Android系统上得到了加强,Google为电话、短信和联系人提供了强大的管理功能和智能云备份的能力,一些应用也为电话提供了归属地查询和垃圾短信过滤等功能。电话和短信构成了Android最基本的通信应用,满足用户最基本的通信需要。借助于IM、KIK等应用,不仅可以用文本来传输信息,还可以使用图像、语音、视频等方式交互;可以将通信内容完全保存在服务器上,方便随时查看。

Android网络应用程序丰富了通信的方式,提高了通信的质量,只要在联网的情况下就可以使用,不必通过电信运营商,大大降低了通信的成本。1.2.2 及时分享

Android应用的社会化已经成为了不可或缺的基本功能,很多应用程序都增加了分享的功能以实现其社会化。通过社会化应用,用户可以将自己的心情、想法随时随地发到微博上;看到有趣的图片也可以直接上传到分享网站;有需要帮助的问题,立刻就可以使用问答应用提问,等待大家的回答。这些分享的信息,不但能充分利用移动的优势,将用户的信息及时发布到互联网上,分享给好友,还能充分利用终端的硬件优势,比如GPS、摄像头等,多维度地分享自己的生活和见闻。用户在分享的过程中,大量的经验和知识被保存起来,为知识化的互联网提供了更多的素材。

Android网络应用程序丰富了社会化交流,用户可以及时发布信息、提供帮助、交流看法,分享身边的一切。1.2.3 个人管理

个人事务管理应用将Android变成随身的智能管理工具。印象笔记、有道笔记和麦库等云笔记应用以知识管理见长,帮助用户收集随手得来的内容,把碎片知识整理起来,存储到云端,用户可以在多个设备上方便地查看。Doit.im、Remember The Milk和toodledo等时间管理应用重造了任务列表,最大程度地帮助用户管理时间。挖财、随手记等应用帮助用户对个人财务进行分析。

Android网络应用程序加强了用户管理时间、知识、财务的能力,用户把以前记到本子上的内容,通过Android记到云端,可以随时随地查看、学习和管理,用起来更加得心应手。1.2.4 娱乐游戏

近年来,Android系统软硬件的快速发展(软件方面,Android系统原生支持更多的游戏外设;硬件方面,CUP、内存和屏幕等硬件变得更加强大),使得游戏和娱乐应用不断发展。Android应用商店里面的游戏娱乐的比重在不断增加,更多的大型游戏出现在Android上。同时使用Android进行在线支付、购物变得更加方便。

在线的游戏、视频、音乐、广播已经成为人们生活的一部分,Android已变为娱乐游戏的强大载体。1.2.5 企业应用

Android作为免费的系统,可以有效降低企业应用的成本;而开放的源代码又为企业应用提供了更多稳定性的保证。众多硬件厂商也根据不同的应用环境开发了不同特性的硬件,比如医疗、军事、运动等不同方面的Android硬件产品。企业软件也在不断发展,比如Epocrates应用可帮助医疗护理专业人员快速和方便地获取可靠的药物信息;SAP的SkyMobile应用可帮助销售和服务人员访问SAP的CRM系统,进而访问客户数据。

Android企业应用将进一步提高企业的生产效率,为企业移动办公提供更加方便、可靠的平台。1.3 设置Android开发环境

Android应用的开发需要建立一个开发环境,并需要进行一些设置。本节将以Windows平台为例来一步一步地讲解如何设置Android开发环境。1.3.1 相关下载

1.JDK下载

首先需要下载JDK6。Android SDK需要JDK5或者JDK6,我们使用JDK6来开发本书中的案例。可以从Oracele的官方网站(http://www.oracle.com/technetwork/java/javase/downloads/index.html)下载JDK6,然后安装。

安装JDK之后需要设置环境变量,设置JAVA_HOME环境变量指向JDK安装文件夹。在Windows XP系统中,可以右击“我的电脑”图标,在弹出的快捷菜单中选择“属性”命令,然后在弹出的对话框中选择“高级”选项卡,然后单击“环境变量”按钮。“新建”或者“编辑”JAVA_HOME变量,将其设置为上面JDK的安装目录。在Windows Vista和Window 7中,可以选择“开始”→“计算机”,右击选择“属性”,依次单击“高级系统设置”→“环境变量”,就可以更改环境变量了,将JAVA_HOME变量设置为JDK的安装目录。

通过在命令行里面输入Java-c来验证设置是否正确,设置正确之后会出现图1-2所示的提示(其中版本号可能不同)。图 1-2 Java-c提示

2.Eclipse下载

安装JDK之后,可以下载Eclipse IDE for JAVA Developer。本书中使用Eclipse 3.7进行示例开发。其下载网址为http://www.eclipse.org/downloads/。下载之后为一个.zip文件,可以解压缩到合适的目录下,目录中的启动图标为eclipse.exe。

3.下载Android SDK

需要使用Android SDK来开发Android应用程序,其下载网址为http://developer.android.com/sdk/index.html,根据不同的系统选择相应的版本下载并安装。图1-3所示是SDK安装过程中的一个截图。安装之后启动Android SDK Manager,根据开发需要,选择安装平台版本。本书中如无特别指明,均是使用Android 4.1的平台版本。图 1-3 SDK安装过程截图1.3.2 安装ADT

ADT插件对于开发Android应用程序有非常重要的作用,ADT和Eclipse集成之后,提供了一些工具来自动地创建、检测、测试和调试Android应用程序。可以在Eclipse中的Install New Software处进行安装。启动Eclipse IDE之后,其步骤如下:

步骤1 在Eclipse菜单栏上选择Help,单击下拉菜单Install New Software选项。

步骤2 在Work with字段中,输入https://dl-ssl.google.com/android/eclipse/,回车后Eclipse会链接到该网站,并生成可以下载插件的列表,如图1-4所示。图 1-4 ADT下载插件列表

注意 如果已经安装过会显示需要更新的项目。如输入的链接不能使用,可以使用http://dl-ssl.google.com/android/eclipse/链接,或者下载离线安装包,单击图中的Add按钮,从Archive里面选择离线安装包的位置。

步骤3 选择Developer Tools,将全部选中其子选项,然后单击Next按钮。

步骤4 Eclipse将要查看ADT和ADT安装所需要工具的许可协议。查看许可协议,单击"I accept…",然后单击Finish按钮。

步骤5 Eclipse将下载Developer Tools并安装,安装过程中Eclipse需要重新启动才能使用ADT。

步骤6 在Eclipse中安装ADT之后需要配置Android SDK,单击菜单Window->Preferences,进入图1-5所示界面,选择你的Android SDK解压后的目录或者安装目录。图 1-5 选择目录

步骤7 新建AVD(Android Vitural Device)。单击菜单Window->AVD Manager,进入图1-6所示的AVD管理器。图 1-6 AVD管理器

步骤8 单击New按钮后,进入如图1-7所示的新建AVD详细界面。名称可以随便取,在Target下拉列表中选择你需要的SDK版本,SD卡大小自定义,单击Create AVD按钮,创建AVD完毕。图 1-7 新建AVD详细界面

注意 如果需要添加(如GPS等)其他AVD选项,可以单击New按钮,从下拉菜单里面选择相应选项。1.3.3 Hello World!

本节通过Hello World程序,介绍创建Android程序的过程。这段程序甚至不需要写一行代码,就可以全自动地创建好。

步骤1 打开Eclipse,选择菜单File->New->Android Application Project,显示如图1-8所示的创建Android程序界面。

在图1-8所示的Application Name文本框中输入应用名称,在Project Name文本框中输入项目名称,在Package Name文本框中输入包名,在Build SDK下拉列表中选择项目目标SDK版本,在Minimum Required SDK下拉列表中选择项目所需要的最小SDK版本。图 1-8 新建Android界面

注意 如果该项目为其他项目的库,应勾选Mark this project as a library。

步骤2 单击Next按钮之后,显示的界面如图1-9所示,用户可以定义应用显示的图标。Image选择背景图片;Clipart选择系统的切图;Text中输入文字。Trim Surrounding Blank Space选项设置前景图是否自动充满背景图;Additional Padding设置前景图和背景图的显示比例;Foreground Scaling设定背景的尺寸,Crop为拉伸,Center为居中;Shape设定背景图的形状,None设置背景为空,Square设为方形背景,Circle设为圆形背景;Backgroud Color和Foreground Color分别设置显示图标的背景色和前景色。图 1-9 选择应用图标

步骤3 单击Next按钮之后,进入的界面如图1-10所示。选择Activity的显示方式:BlankActivity创建空的Acitivity,这个和传统的创建方式类似;MasterDetailFlow将创建带“碎片”的程序,可以重复利用较大的屏幕。图 1-10 选择Activity类型

步骤4 单击Next按钮,填写Activity信息,进入的界面如图1-11所示。在Activity Name文本框中输入该Acitivity的名称;在Layout Name文本框中输入其对应的布局名称;在Navigation Type下拉列表中选择导航类型,该下拉列表包括的选项有None、Tabs、Tabs+Swipes、Swipe Views+Title Strip和Dropdown,可以根据需要进行选择,本例子中选择None;在Hierarchical Parent中选择父节点,用以指定向上按键指向的界面;在Title文本框中指定显示的名称。图 1-11 填写Acitivity信息

步骤5 单击Finish按钮进入如图1-12所示的布局编辑界面。图 1-12 界面编辑

步骤6 切换到代码编辑界面,如图1-13所示。图 1-13 代码编辑界面

注意 若有错误,如Project…is missing required source folder:'gen',则将gen->Android.Test->R.java这个文件删掉,Eclipse会重新生成这个文件,并且不会再报错。

步骤7 运行该项目前,需要进行一些设置,右击项目,在弹出的快捷菜单中依次单击Run as->Run Configuration,进入如图1-14所示界面,选择需要运行的项目。图 1-14 选择项目配置运行

选择Target,切换到如图1-15所示的界面,在对应的复选框中打钩,以选择希望运行的AVD。图 1-15 选择AVD运行目标

步骤8 单击Run按钮,就可以运行该项目了。图1-16所示为AVD正在加载的界面,模拟器启动后如图1-17所示。图 1-16 正在加载AVD图 1-17 启动成功1.4 网络应用实战案例

通过加载现有的Web页面来实现Android应用的功能是一种常见的方法。本节通过一个实际案例来展示如何加载一个现有页面,并在此页面的基础上增加需要的功能。1.4.1 加载一个页面

如需在应用里面提供在线翻译的功能,最简单的方法就是给用户加载一个翻译的网站,用户进入该网站后自行输入想要翻译的单词,并查看翻译的结果。在界面上添加一个按钮,使得用户单击之后自动打开谷歌翻译网站。

步骤1 在Eclipse里面创建项目。

步骤2 添加字符串。在字符串文件\res\values\strings.xml里面(如下代码所示)添加需要的字符串,并指定显示的内容。<string name="open_ulr">OpenURL</string>

步骤3 添加Button控件。打开res\layout\main.xml文件,在布局文件中添加Button按钮。代码如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fll_parent"android:layout_height="fll_parent"android:orientation="vertical"><TextViewandroid:layout_width="fll_parent"android:layout_height="wrap_content"android:text="@string/hello"/><Buttonandroid:id="@+id/open_ulr"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/open_ulr"/></LinearLayout>

步骤4 最简单的加载情况,调用系统的浏览器来打开一个页面,代码如下:package org.chenwen.openurl;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.widget.Button;public class OpenURL extends Activity{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button bt1=(Button)findViewById(R.id.button1);bt1.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View arg0){Uri uri=Uri.parse("http://translate.google.cn/");Intent intent=new Intent(Intent.ACTION_VIEW,uri);startActivity(intent);}});}}

Uri.parse()方法返回的是一个URI类型,通过这个URI可以访问一个网络上的或者本地的资源,Intent()方法告诉系统调用哪个组件来打开这个URI。这里指明是使用Intent.ACTION_VIEW,这将调用系统里面的浏览器来打开指定的网页,如图1-18所示。这个网页会显示一个翻译网页。图 1-18 运行OpenURL应用和单击按钮OpenURL之后的效果

有时候,希望页面能够在应用内部打开,以方便添加一些需要的功能,这时可以在应用里面使用WebView控件。WebView是Android里面的浏览器组件,负责打开HTML文件,setContent()方法动态的添加布局,loadUrl()方法从网址加载一个页面,loadDate()和loadDataWithBaseURL()方法都是从字符串来加载一个页面。

重新建立一个项目,添加WebView控件到项目的主界面。

WebView打开页面的方法如下:WebView wv=(WebView)findViewById(R.id.webView1);wv.loadUrl("http://translate.google.cn/m");

loadUrl的原型如下:void loadData(String data,String mimeType,String encoding)

如果参数encoding的值为base64,则必须使用base64编码之后的数据。其各参数含义如下。

■data参数:数据字符串。

■mimeType参数:表明数据的MIME类型,如text/html。

■Encoding参数:数据的编码。

注意 loadUrl方法在遇到错误网页的时候不会报出异常,且loadData方法不能处理js、https等格式的页面特效。如果需要检测页面异常,可以先对页面进行判定,使用loadDataWithBaseURL可以加载https等特殊页面。

使用WebView控件后,运行应用,其效果如图1-19a所示。这是因为没有添加网络权限,在配置文件中添加权限后运行效果如图1-19b所示。图 1-19 WebView打开页面

实现上述功能的主要代码如下所示:<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="org.chenwen.openwebview"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="15"/><uses-permission android:name="android.permission.INTERNET"></uses-permission><applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"><activityandroid:name=".OpenWebiewActivity"android:label="@string/title_activity_open_webiew"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter></activity></application></manifest>

注意 添加权限的位置,要在application标签之前,否则在某些高版本的编译器中不能通过,或者没有效果。

在翻译输入框里面,输入Android单击“翻译”按钮,其翻译结果如图1-20a所示。其翻译结果显示时,打开的页面已经超出了应用的控制范围了,如果希望其翻译结果仍然显示在该应用内部,可以使用WebView的setWebViewClient()方法来解决这个问题。修改后翻译效果如图1-20b所示。图 1-20 翻译效果

实现上述功能的主要代码如下所示:WebView wv=(WebView)findViewById(R.id.webView1);wv.loadUrl("http://translate.google.cn/m");wv.setWebViewClient(new WebViewClient(){public boolean shouldOverrideUrlLoading(WebView view,String url){view.loadUrl(url);return true;}});1.4.2 下载一个页面

为了更好地服务使用者,在很多情况下需要保存用户搜索过的翻译页面。要实现这个功能,需要保存加载的页面。首先通过网址生成URL对象,然后打开链接,写入Buffer中,最后写入字符串中,方便进一步的处理。实现相应功能的主要代码如下所示:try{URL newUrl=new URL("http://translate.google.cn/m");URLConnection connect=newUrl.openConnection();DataInputStream dis=new DataInputStream(connect.getInputStream());BufferedReader in=new BufferedReader(new InputStreamReader(dis,"UTF-8"));String html="";String readLine=null;while((readLine=in.readLine())!=null){html=html+readLine;Log.d("OpenWebiewActivity",readLine);}in.close();}catch(MalformedURLException me){}catch(IOException ioe){}1.5 小结

本章介绍Android的发展、Android在网络方面的应用、Android开发的设置、如何对现有的页面进行简单的加载下载等内容。接下来我们会围绕Android网络编程从核心概念到实战案例,一步一步地来深入理解Android网络编程。第二篇实战篇本部分内容:●Android基本网络技术和编程实践●Android基本Web技术和编程实践●Android常见网络接口编程●Android网络模块编程●Android线程、数据存取、缓存和UI同步●基于SIP协议的VoIP应用●基于XMPP协议的即时通信应用|第2章|Android基本网络技术和编程实践

本章主要介绍计算机网络的相关概念,包括TCP/IP分层模型及IP、TCP、UDP等主要协议。在此基础上,重点阐述在Android中如何使用TCP和UDP进行通信。最后,给出Android Socket编程的一个实际案例。2.1 计算机网络及其协议

网络原指用一个巨大的虚拟画面,把所有东西连接起来。计算机网络最初的目的也只是将各个独立的计算机连接起来,但是现在的计算机网络所能实现的已远远超出了人们早期的构想。在人们生活中,计算机网络已经无处不在,如网络视频、网络购物、网络教育等。2.1.1 计算机网络概述

计算机网络就是用物理链路将各个孤立的工作站或主机连接在一起,组成数据链路,从而达到资源共享和通信的目的。凡将地理位置不同且具有独立功能的多个计算机系统通过通信设备和线路连接起来,并以功能完善的网络软件(网络协议、信息交换方式及网络操作系统等)实现网络资源共享的系统,均可称为计算机网络。简单地说,计算机网络即连接两台或多台计算机进行通信的系统。

计算机网络的功能主要表现在硬件资源共享、软件资源共享和用户间信息交换等方面。

■硬件资源共享:可以在全网范围内提供对处理资源、存储资源、输入输出资源等设备的共享,使用户节省投资,也便于集中管理和均衡分担负荷。

■软件资源共享:允许互联网上的用户远程获得各类服务,如网络文件传送服务、远地进程管理服务和远程文件访问服务,从而避免软件研制上的重复劳动及数据资源的重复存储,也便于集中管理。

■用户间信息交换:计算机网络为分布在各地的用户提供了强有力的通信手段。用户可以通过计算机网络传送电子邮件、发布新闻消息和进行电子商务活动。

■提高计算机的可靠性和可用性:网络中的每台计算机都可通过网络相互成为后备机。一旦某台计算机出现故障,它的任务就可由其他的计算机代为完成,这样可以避免在单机情况下,一台计算机发生故障引起整个系统瘫痪的现象,从而提高系统的可靠性。而当网络中的某台计算机负担过重时,网络又可以将新的任务交给较空闲的计算机完成,均衡负载,从而提高了每台计算机的可用性。

■分布式处理:通过算法将大型的综合性问题交给不同的计算机同时进行处理。用户可以根据需要合理选择网络资源,就近快速地进行处理。

计算机网络中用于规定信息的格式以及如何发送和接收信息的一套规则称为网络协议或通信协议。网络协议是为计算机网络中进行数据交换而建立的规则、标准或约定的集合。不同的计算机之间必须使用相同的网络协议才能进行通信。2.1.2 网络协议概述

大多数网络都采用分层的体系结构,每一层都建立在它的下层之上,同时向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。一台设备上的第n层与另一台设备上的第n层进行通信的规则就是第n层协议。在网络的各层中存在着许多协议,接收方和发送方同层的协议必须一致,否则一方将无法识别另一方发出的信息。网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。通过网络协议,网络上各种设备才能够相互交换信息。

由于网络节点之间联系的复杂性,在制定协议时,通常把复杂成分分解成一些简单成分,然后再将它们复合起来。最常用的复合技术就是采用层次的方法,网络协议的层次结构如下:

■结构中的每一层都规定有明确的任务及接口标准。

■把用户的应用程序作为最高层。

■除了最高层外,中间的每一层都向上一层提供服务,同时又是下一层的用户。

■把物理通信线路作为最低层,它使用从最高层传送来的参数,是提供服务的基础。

为了使不同厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了“开放系统互连参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

其中低4层完成数据传送服务,上面3层面向用户。对于每一层,至少制定两项标准:服务定义和协议规范。前者给出了该层所提供的服务的准确定义,后者详细描述了该协议的动作和各种有关规程,以保证服务的提供。

■应用层:是开放系统互连环境的最高层。应用层为操作系统或网络应用程序提供访问网络服务的接口。

■表示层:为上层用户提供共同的数据或信息的语法表示变换。为了让采用不同编码方法的计算机在通信中能相互理解数据的内容,可以采用抽象的标准方法来定义数据结构,并采用标准的编码表示形式。表示层管理这些抽象的数据结构,并将计算机内部的表示形式转换成网络通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的表示变换功能。

■会话层:也称会晤层,主要功能是组织和同步不同的主机上各种进程间的通信(称为对话),负责在两个会话层实体之间进行对话连接的建立和拆除。会话层还提供在数据流中插入同步点的机制,使得数据传输因网络故障而中断后,可以不必从头开始而是仅重传最近一个同步点以后的数据。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载