




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章Android的网络开发技术本章简介本章主要对Android提供的一系列网络开发技术进行介绍:对Socket通信进行简介;对HTTP通信进行简介;对webView网络开发技术进行简介;对蓝牙通信技术进行简介;对WIFI通信技术进行简介。本章目录10.1Android网络通信简介10.2WebView10.3HTTP网络通信10.4Socket通信10.5蓝牙通信10.6WIFI通信10.7小结10.8习题10.1Android网络通信简介本节本章将详细介绍由Android提供的一系列网络开发技术,包括Socket通信、HTTP通信、WebView网络开发技术、蓝牙通信技术以及WIFI通信技术。10.1.1Socket通信简介10.1.2HTTP协议基础10.1.3蓝牙通信简介10.1.4WIFI通信简介10.1.1Socket通信简介Socket通常也称为“套接字”,它主要用于描述通信链的句柄,包括IP地址和端口。Socket工作机制包括服务端和客户端两部分。服务端可以包含多个端口,每个端口由端口号标识。当客户端与服务端建立连接时,首先,需要服务端打开端口监听来自客户端的请求;然后,客户端才能通过IP地址和端口号向服务器端发送连接请求;最后,服务器端接受请求,连接成功后,双方方可进行通信。Socket机制主要使用到的类有.ServerSocket和.Socket等。服务器端以监听端口(port)作为输入参数可实例化一个ServerSocket类,可以使用ServerSocket的accept()方法接收来自客户端的连接请求。客户端则直接以服务器的IP地址(dstName)和监听端口(dstPort)作为参数实例化Socket类,并用Socket对象连接服务器端。当服务器端和客户端连接建立完成后,便可以进行网络通信。服务器端和客户端之间是以流的方式进行通信。服务器端通过调用Socket的getOutputStream()方法获得输出流,并通过向其写入数据将信息传递给客户端。客户端通过调用Socket的getInputStream()方法获得输入流,并通过它接收服务器端发送的数据。图10-1Socket工作机制示意图10.1.2HTTP协议基础超文本传输协议(HyperTextTransferProtocol,HTTP)是Web联网的基础,也是移动设备联网常用的协议之一。HTTP协议是建立在TCP协议之上的一种应用,用于传输WWW方式的数据。HTTP协议采用了请求/应答通信模式,是一种属于应用层的面向对象的协议。Android采用的HTTP协议版本是HTTP1.1,可使用Java语言的.URL类进行HTTP通信开发。10.1.3蓝牙通信简介
蓝牙是使用最广泛的无线通信协议之一,它主要用于近距离无线通信。蓝牙协议工作在ISM(IndustrialScientificMedical)频段的2.4~2.485GHz范围内,其最高数据传输速率可达3Mb/s。蓝牙通信具有发射功率低、安全性高、易于使用和即时连接等优点。Android系统已经内置了蓝牙通信的协议栈,并为蓝牙通信开发提供了android.bluetooth包。在android.bluetooth包内的蓝牙通信类如下:BluetoothAdapter该类代表了一个本地蓝牙适配器,它是所有蓝牙交互的入口。BluetoothDevice该类代表了一个远程的蓝牙设备,可使用该类提供的方法请求远端蓝牙设备连接或获取远端蓝牙设备的名称、地址、种类以及绑定状态。Bluetoothsocket该类代表了一个蓝牙的套接字接口,他是应用程序通过输入流、输出流与蓝牙设备进行通信的连接点。Bluetoothserversocket该类可打开服务连接以监听可能到来的连接请求。10.1.4WIFI通信简介
WIFI又称无线通信802.11b标准,他是一种将个人电脑、手持设备等终端以无线方式互相连接的技术。与蓝牙通信相比,WIFI是一种更加快速的通信协议,其无线信号覆盖的范围更大。Android系统为WIFI通信开发提供了下述类:ScanResult该类主要是通过对WIFI设备的扫描来获取周边WIFI热点的信息。WifiConfiguration该类主要用来进行WIFI的网络配置,包括安全配置等。WifiInfo该类主要进行用来描述WIFI无线连接。WifiManager该类提供了管理WIFI无线连接的大部分API。10.2WebViewAndroid系统内置了一款高性能的webkit浏览器,他被封装为AndroidSDK的WebView控件。WebView控件既可直接浏览网页内容,也能够载入显示HTML文件。此外,WebView控件还能够对JavaScript提供支持。方法名称方法说明addJavascriptInterface()绑定一个JavaScript对象canGoBack()判断能否从当前网页返回上一个打开的网页canGoForward()判断能否从当前网页返回下一个打开的网页goBack()在WebView历史记录中后退一步goForward()在WebView历史记录中前进一步loadUrl()读取指定URL地址的数据reload()重新加载页面getProgress()获得页面加载进度表10-2WebView控件的常用方法下面给出应用示例10-1,说明使用WebView控件浏览网页的方法。如图10-2所示,该应用程序的主界面包含一个文本编辑框和一个WebView控件。文本编辑框用于接收用户输入的URL网址,WebView控件则用于加载、显示输入URL的网页。
该应用程序的界面布局代码如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/url" android:layout_width="match_parent" android:layout_height="wrap_content" /> <!--显示页面的WebView组件-->
<WebView android:id="@+id/show" android:layout_width="match_parent" android:layout_height="match_parent“</LinearLayout>10.3HTTP网络通信本节介绍使用HttpURLConnection方式开发HTTP网络应用。10.3.1HttpURLConnection简介10.3.2使用HttpURLConnection10.3.1HttpURLConnection简介HTTP详细规定了浏览器和万维网(WorldWideWeb)服务器之间互相通信的规则。客户机和服务器都必须支持HTTP,才能在万维网上发送和接收HTML文档。HttpURLConnection是Java的标准类,它继承自HttpConnection类。HttpURLConnection类提供了如表10-3所示的常用方法。表10-3HttpURLConnection的常用方法方法名称方法说明getResponseCode()获取服务器的响应代码getResponseMessage()获取服务器的响应信息getResponseMethod()获取发送请求的方法setRequestMethod()设置发送请求的方法setDoInput()设置输入流setDoOutput()设置输出流setConnectTimeout()设置连接超时时间HttpURLConnection是一个抽象类,无法直接用以实例化对象。在应用程序开发中,通常使用URL类的openConnection()方法获得一个HttpURLConnection对象。例如,可使用下述代码获得一个HttpURLConnection对象。URLurl=newURL(“”);HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();openConnection()方法仅仅是创建了HttpURLConnection对象,并不执行真正的连接操作。因此,应用程序通常需要在与服务器连接之前调用setRequestMethod()、setDoInput()和setDoOutput()等方法对HttpURLConnection的属性进行必要的配置。当完成了对HttpURLConnection对象的初始化之后,就可以使用GET方式或POST方式与服务器进行通信。10.3.2使用HttpURLConnectionHttpURLConnection默认情况下会使用GET方式请求网络资源。GET请求可使用InputStreamReader对象将服务器上存储的网页内容读取为字节流并将其解码为字符串。但是,InputStreamReader每次只可读取一个字符。为提高数据读取的效率,Java用BufferedReader进一步封装了InputStreamReader类,可以使用该类逐行读取服务器上存储的网页内容。下面给出应用示例10-2,说明如何使用HttpURLConnection获取html网页。该应用程序的界面布局代码如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/send_request" android:layout_width="match_parent" android:layout_height="wrap_content" /> <!--显示页面的ScrollView组件--> <ScrollViewandroid:layout_width="match_parent" android:layout_height="match_parent"><TextView android:id="@+id/response_text" android:layout_width="match_parent" android:layout_height="match_parent"/> </ScrollView></LinearLayout>可在“MainActivity.java”文件中,使用下述粗体字标记的代码发送访问html网页的请求以及将从服务器返回的网页数据显示到主界面中。
可在“MainActivity.java”文件中,使用下述粗体字标记的代码发送访问html网页的请求以及将从服务器返回的网页数据显示到主界面中。图10-3使用HttpURLConnection查看html代码10.4Socket通信本章主要介绍了Socket通信;10.4.1基于TCP的Socket通信10.4.2基于UDP的Socket通信10.4.1基于TCP的Socket通信Client端如果要发起一次通信,必须知道运行Server端的主机IP地址,然后通过指定的端口和Server建立连接,最后进行通信,通信方式如图10-4所示。图10-4Socket通信示意图可使用下述步骤建立基于TCP的Server端。
1.指定一个端口实例化一个ServerSocket对象。//创建一个监听9090端口的ServerSocket对象ServerSocketserver=newServerSocket(9090);2.收到Client连接请求后调用ServerSocket的accept()方法,返回一个连接的Socket对象。Socketclient=server.accept();3.根据应用程序需要,获取Socket的输出流(PrintStream),向Client端写入数据。PrintStreamout=newPrintStream(client.getOutputStream());4.根据应用程序需要,获取Socket的输入流(BufferedReader),从Client端读取数据。5.使用输入流或输出流,从Client端读取或写入数据。6.使用BufferedReader.close()或PrintStream.close()方法关闭输入、输出流。1.通过指定Server的IP和端口,向Server端发出连接请求。Socketclient=newSocket(“”,9090);2.获取Socket的输出流(PrintStream),向Server端写入数据。PrintStreamout=newPrintStream(client.getOutputStream());3.获取Socket的输入流(BufferedReader),从Server端读取数据。4.使用输入流或输出流,从Server端读取或写入数据。5.使用BufferedReader.close()或PrintStream.close()方法关闭输入、输出流。可使用下述步骤建立基于TCP的Client端客户端应用需要访问计算机网络,因此还应在AndroidManifest.xml清单文件为其添加如下代码所示的网络访问权限。编译并运行程序,点击“连接到服务器”按钮,可以看到由服务器端在连接成功时返回的提示信息,如图10-5所示。10.4.2基于UDP的Socket通信TCP是一种面向连接的传输协议,建立连接时要经过三次握手,断开连接也要经过四次握手,中间传输数据时也要回复ACK包确认,多种机制保证了数据能够正确到达,不会丢失或出错。UDP则是一种非连接的传输协议,没有建立连接和断开连接的过程。它只是简单地把数据发送到网络中,不需要ACK包确认。基于UDP的Socket通信程序同样包括服务器端和客户端。可参考下述代码设计基于UDP的服务器端。//创建服务端socket,并使之监听9999端口DatagramSocketsocket=newDatagramSocket(9999);byte'data[]=newbyte[1024];//准备接收数据DatagramPacketpacket=newDatagramPacket(data,data.length);//接收到数据报文,并将报文中的数据复制到指定的DatagramPacket实例中socket.receive(packet);Strings=packet.getData();2//接收DatagramPacket实例中的数据,转换成字符串可参考下述代码设计基于UDP的客户端。DatagramSocketsocket=newDatagramSocket(9999);出//创建客户端socketInetAddressserverAddress=InetAddress.getByName("211.699.1.1");//服务端地址
DatagramPacketpacket=newDatagramPacket(data,data.length,serverAddress,9999);//打包要发送的数据socket.send(packet);//发送DatagramPacket对象10.5蓝牙通信蓝牙是一种支持设备之间短距离通信的无线电通信技术。它能在包含移动电话、PDA、无线耳机、笔记本电脑和蓝牙打印机等众多设备之间进行无线信息交换。Android为支持蓝牙开发提供了android.bluetooth包,它包括下述基础类。1.BluetoothAdapter该类代表了一个本地蓝牙适配器,它是所有蓝牙交互的入口。可使用该类提供的方法发现其它蓝牙设备、查询绑定的蓝牙设备、使用已知MAC地址创建蓝牙设备,以及建立一个BluetoothServerSocket来监听来自其它蓝牙设备的连接。2.BluetoothDevice
该类代表了一个远程的蓝牙设备,可使用该类提供的方法请求远端蓝牙设备连接或获取远端蓝牙设备的名称、地址、种类以及绑定状态。表10-6是该类提供的常用常量,表10-7是该类提供的常用方法。
3.BluetoothSocket
该类代表了一个蓝牙的套接字接口,它是应用程序通过输入流、输出流与蓝牙设备进行通信的连接点。表10-8是该类提供的常用方法。
10.6WIFI通信Android为支持WIFI通信开发提供了.wifi包,它包括下述基础类。ScanResult该类主要通过对WIFI网络的扫描来获得设备周边的WIFI热点信息,包括WIFI接入点地址、名称、身份认证和信号强度等信息。表10-9是该类常用的用于存储WIFI信息的变量。WifiConfiguration该类主要用于设置WIFI网络。表10-10是该类常用的用于配置WIFI信息的变量。WifiInfo该类主要用于获得已经连接的WIFI网络的连接信息,包括网络连接状态、接入点IP地址、WIFI连接速度、接入点MAC地址以及网络ID等。表10-11是该类提供的用于获取WIFI连接信息的常用方法。WifiManager该类主要用于对WIFI连接进行管理。表10-12是该类提供的常用常量,表10-13是该类提供的常用方法。习题(填空题)一、填空题1.
Ht
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗用品牙科管理制度
- 公司禁烟禁火管理制度
- 大学采购外协管理制度
- 劳动关系解除管理制度
- 商场清洁日常管理制度
- 工程分包资料管理制度
- 室内种植植物管理制度
- 关于工地材料管理制度
- 商业运营服务管理制度
- 公司财务库房管理制度
- 阵列间距计算表(光伏设计程序工具excel自带公式版)
- 《夏商和西周的贝币》课件
- 轴对称与轴对称图形课件
- 新疆礼信新材料有限公司年产5千吨碳酸锂及5万吨新型材料项目环评报告表
- 免疫系统的疾病和治疗
- 期末考试复习方法指导《复之有道习之有效》期末考试动员期末考试心态调整主题班会
- 护理查房流程甲亢
- 物流专线协议书简短 物流专线合作协议
- 剑桥Think第一级+Unit+2+Money+and+how+to+spend+it+课件
- 消防救援-森林火灾扑救组织指挥及基本战法
- 认识飞机(课堂PPT)
评论
0/150
提交评论