版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第10章Android的網(wǎng)絡(luò)開發(fā)技術(shù)本章簡介本章主要對(duì)Android提供的一系列網(wǎng)絡(luò)開發(fā)技術(shù)進(jìn)行介紹:對(duì)Socket通信進(jìn)行簡介;對(duì)HTTP通信進(jìn)行簡介;對(duì)webView網(wǎng)絡(luò)開發(fā)技術(shù)進(jìn)行簡介;對(duì)藍(lán)牙通信技術(shù)進(jìn)行簡介;對(duì)WIFI通信技術(shù)進(jìn)行簡介。本章目錄10.1Android網(wǎng)絡(luò)通信簡介10.2WebView10.3HTTP網(wǎng)絡(luò)通信10.4Socket通信10.5藍(lán)牙通信10.6WIFI通信10.7小結(jié)10.8習(xí)題10.1Android網(wǎng)絡(luò)通信簡介本節(jié)本章將詳細(xì)介紹由Android提供的一系列網(wǎng)絡(luò)開發(fā)技術(shù),包括Socket通信、HTTP通信、WebView網(wǎng)絡(luò)開發(fā)技術(shù)、藍(lán)牙通信技術(shù)以及WIFI通信技術(shù)。10.1.1Socket通信簡介10.1.2HTTP協(xié)議基礎(chǔ)10.1.3藍(lán)牙通信簡介10.1.4WIFI通信簡介10.1.1Socket通信簡介Socket通常也稱為“套接字”,它主要用于描述通信鏈的句柄,包括IP地址和端口。Socket工作機(jī)制包括服務(wù)端和客戶端兩部分。服務(wù)端可以包含多個(gè)端口,每個(gè)端口由端口號(hào)標(biāo)識(shí)。當(dāng)客戶端與服務(wù)端建立連接時(shí),首先,需要服務(wù)端打開端口監(jiān)聽來自客戶端的請(qǐng)求;然后,客戶端才能通過IP地址和端口號(hào)向服務(wù)器端發(fā)送連接請(qǐng)求;最后,服務(wù)器端接受請(qǐng)求,連接成功后,雙方方可進(jìn)行通信。Socket機(jī)制主要使用到的類有.ServerSocket和.Socket等。服務(wù)器端以監(jiān)聽端口(port)作為輸入?yún)?shù)可實(shí)例化一個(gè)ServerSocket類,可以使用ServerSocket的accept()方法接收來自客戶端的連接請(qǐng)求。客戶端則直接以服務(wù)器的IP地址(dstName)和監(jiān)聽端口(dstPort)作為參數(shù)實(shí)例化Socket類,并用Socket對(duì)象連接服務(wù)器端。當(dāng)服務(wù)器端和客戶端連接建立完成后,便可以進(jìn)行網(wǎng)絡(luò)通信。服務(wù)器端和客戶端之間是以流的方式進(jìn)行通信。服務(wù)器端通過調(diào)用Socket的getOutputStream()方法獲得輸出流,并通過向其寫入數(shù)據(jù)將信息傳遞給客戶端。客戶端通過調(diào)用Socket的getInputStream()方法獲得輸入流,并通過它接收服務(wù)器端發(fā)送的數(shù)據(jù)。圖10-1Socket工作機(jī)制示意圖10.1.2HTTP協(xié)議基礎(chǔ)超文本傳輸協(xié)議(HyperTextTransferProtocol,HTTP)是Web聯(lián)網(wǎng)的基礎(chǔ),也是移動(dòng)設(shè)備聯(lián)網(wǎng)常用的協(xié)議之一。HTTP協(xié)議是建立在TCP協(xié)議之上的一種應(yīng)用,用于傳輸WWW方式的數(shù)據(jù)。HTTP協(xié)議采用了請(qǐng)求/應(yīng)答通信模式,是一種屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議。Android采用的HTTP協(xié)議版本是HTTP1.1,可使用Java語言的.URL類進(jìn)行HTTP通信開發(fā)。10.1.3藍(lán)牙通信簡介
藍(lán)牙是使用最廣泛的無線通信協(xié)議之一,它主要用于近距離無線通信。藍(lán)牙協(xié)議工作在ISM(IndustrialScientificMedical)頻段的2.4~2.485GHz范圍內(nèi),其最高數(shù)據(jù)傳輸速率可達(dá)3Mb/s。藍(lán)牙通信具有發(fā)射功率低、安全性高、易于使用和即時(shí)連接等優(yōu)點(diǎn)。Android系統(tǒng)已經(jīng)內(nèi)置了藍(lán)牙通信的協(xié)議棧,并為藍(lán)牙通信開發(fā)提供了android.bluetooth包。在android.bluetooth包內(nèi)的藍(lán)牙通信類如下:BluetoothAdapter該類代表了一個(gè)本地藍(lán)牙適配器,它是所有藍(lán)牙交互的入口。BluetoothDevice該類代表了一個(gè)遠(yuǎn)程的藍(lán)牙設(shè)備,可使用該類提供的方法請(qǐng)求遠(yuǎn)端藍(lán)牙設(shè)備連接或獲取遠(yuǎn)端藍(lán)牙設(shè)備的名稱、地址、種類以及綁定狀態(tài)。Bluetoothsocket該類代表了一個(gè)藍(lán)牙的套接字接口,他是應(yīng)用程序通過輸入流、輸出流與藍(lán)牙設(shè)備進(jìn)行通信的連接點(diǎn)。Bluetoothserversocket該類可打開服務(wù)連接以監(jiān)聽可能到來的連接請(qǐng)求。10.1.4WIFI通信簡介
WIFI又稱無線通信802.11b標(biāo)準(zhǔn),他是一種將個(gè)人電腦、手持設(shè)備等終端以無線方式互相連接的技術(shù)。與藍(lán)牙通信相比,WIFI是一種更加快速的通信協(xié)議,其無線信號(hào)覆蓋的范圍更大。Android系統(tǒng)為WIFI通信開發(fā)提供了下述類:ScanResult該類主要是通過對(duì)WIFI設(shè)備的掃描來獲取周邊WIFI熱點(diǎn)的信息。WifiConfiguration該類主要用來進(jìn)行WIFI的網(wǎng)絡(luò)配置,包括安全配置等。WifiInfo該類主要進(jìn)行用來描述WIFI無線連接。WifiManager該類提供了管理WIFI無線連接的大部分API。10.2WebViewAndroid系統(tǒng)內(nèi)置了一款高性能的webkit瀏覽器,他被封裝為AndroidSDK的WebView控件。WebView控件既可直接瀏覽網(wǎng)頁內(nèi)容,也能夠載入顯示HTML文件。此外,WebView控件還能夠?qū)avaScript提供支持。方法名稱方法說明addJavascriptInterface()綁定一個(gè)JavaScript對(duì)象canGoBack()判斷能否從當(dāng)前網(wǎng)頁返回上一個(gè)打開的網(wǎng)頁canGoForward()判斷能否從當(dāng)前網(wǎng)頁返回下一個(gè)打開的網(wǎng)頁goBack()在WebView歷史記錄中后退一步goForward()在WebView歷史記錄中前進(jìn)一步loadUrl()讀取指定URL地址的數(shù)據(jù)reload()重新加載頁面getProgress()獲得頁面加載進(jìn)度表10-2WebView控件的常用方法下面給出應(yīng)用示例10-1,說明使用WebView控件瀏覽網(wǎng)頁的方法。如圖10-2所示,該應(yīng)用程序的主界面包含一個(gè)文本編輯框和一個(gè)WebView控件。文本編輯框用于接收用戶輸入的URL網(wǎng)址,WebView控件則用于加載、顯示輸入U(xiǎn)RL的網(wǎng)頁。
該應(yīng)用程序的界面布局代碼如下:<?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網(wǎng)絡(luò)通信本節(jié)介紹使用HttpURLConnection方式開發(fā)HTTP網(wǎng)絡(luò)應(yīng)用。10.3.1HttpURLConnection簡介10.3.2使用HttpURLConnection10.3.1HttpURLConnection簡介HTTP詳細(xì)規(guī)定了瀏覽器和萬維網(wǎng)(WorldWideWeb)服務(wù)器之間互相通信的規(guī)則??蛻魴C(jī)和服務(wù)器都必須支持HTTP,才能在萬維網(wǎng)上發(fā)送和接收HTML文檔。HttpURLConnection是Java的標(biāo)準(zhǔn)類,它繼承自HttpConnection類。HttpURLConnection類提供了如表10-3所示的常用方法。表10-3HttpURLConnection的常用方法方法名稱方法說明getResponseCode()獲取服務(wù)器的響應(yīng)代碼getResponseMessage()獲取服務(wù)器的響應(yīng)信息getResponseMethod()獲取發(fā)送請(qǐng)求的方法setRequestMethod()設(shè)置發(fā)送請(qǐng)求的方法setDoInput()設(shè)置輸入流setDoOutput()設(shè)置輸出流setConnectTimeout()設(shè)置連接超時(shí)時(shí)間HttpURLConnection是一個(gè)抽象類,無法直接用以實(shí)例化對(duì)象。在應(yīng)用程序開發(fā)中,通常使用URL類的openConnection()方法獲得一個(gè)HttpURLConnection對(duì)象。例如,可使用下述代碼獲得一個(gè)HttpURLConnection對(duì)象。URLurl=newURL(“”);HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();openConnection()方法僅僅是創(chuàng)建了HttpURLConnection對(duì)象,并不執(zhí)行真正的連接操作。因此,應(yīng)用程序通常需要在與服務(wù)器連接之前調(diào)用setRequestMethod()、setDoInput()和setDoOutput()等方法對(duì)HttpURLConnection的屬性進(jìn)行必要的配置。當(dāng)完成了對(duì)HttpURLConnection對(duì)象的初始化之后,就可以使用GET方式或POST方式與服務(wù)器進(jìn)行通信。10.3.2使用HttpURLConnectionHttpURLConnection默認(rèn)情況下會(huì)使用GET方式請(qǐng)求網(wǎng)絡(luò)資源。GET請(qǐng)求可使用InputStreamReader對(duì)象將服務(wù)器上存儲(chǔ)的網(wǎng)頁內(nèi)容讀取為字節(jié)流并將其解碼為字符串。但是,InputStreamReader每次只可讀取一個(gè)字符。為提高數(shù)據(jù)讀取的效率,Java用BufferedReader進(jìn)一步封裝了InputStreamReader類,可以使用該類逐行讀取服務(wù)器上存儲(chǔ)的網(wǎng)頁內(nèi)容。下面給出應(yīng)用示例10-2,說明如何使用HttpURLConnection獲取html網(wǎng)頁。該應(yīng)用程序的界面布局代碼如下:<?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”文件中,使用下述粗體字標(biāo)記的代碼發(fā)送訪問html網(wǎng)頁的請(qǐng)求以及將從服務(wù)器返回的網(wǎng)頁數(shù)據(jù)顯示到主界面中。
可在“MainActivity.java”文件中,使用下述粗體字標(biāo)記的代碼發(fā)送訪問html網(wǎng)頁的請(qǐng)求以及將從服務(wù)器返回的網(wǎng)頁數(shù)據(jù)顯示到主界面中。圖10-3使用HttpURLConnection查看html代碼10.4Socket通信本章主要介紹了Socket通信;10.4.1基于TCP的Socket通信10.4.2基于UDP的Socket通信10.4.1基于TCP的Socket通信Client端如果要發(fā)起一次通信,必須知道運(yùn)行Server端的主機(jī)IP地址,然后通過指定的端口和Server建立連接,最后進(jìn)行通信,通信方式如圖10-4所示。圖10-4Socket通信示意圖可使用下述步驟建立基于TCP的Server端。
1.指定一個(gè)端口實(shí)例化一個(gè)ServerSocket對(duì)象。//創(chuàng)建一個(gè)監(jiān)聽9090端口的ServerSocket對(duì)象ServerSocketserver=newServerSocket(9090);2.收到Client連接請(qǐng)求后調(diào)用ServerSocket的accept()方法,返回一個(gè)連接的Socket對(duì)象。Socketclient=server.accept();3.根據(jù)應(yīng)用程序需要,獲取Socket的輸出流(PrintStream),向Client端寫入數(shù)據(jù)。PrintStreamout=newPrintStream(client.getOutputStream());4.根據(jù)應(yīng)用程序需要,獲取Socket的輸入流(BufferedReader),從Client端讀取數(shù)據(jù)。5.使用輸入流或輸出流,從Client端讀取或?qū)懭霐?shù)據(jù)。6.使用BufferedReader.close()或PrintStream.close()方法關(guān)閉輸入、輸出流。1.通過指定Server的IP和端口,向Server端發(fā)出連接請(qǐng)求。Socketclient=newSocket(“”,9090);2.獲取Socket的輸出流(PrintStream),向Server端寫入數(shù)據(jù)。PrintStreamout=newPrintStream(client.getOutputStream());3.獲取Socket的輸入流(BufferedReader),從Server端讀取數(shù)據(jù)。4.使用輸入流或輸出流,從Server端讀取或?qū)懭霐?shù)據(jù)。5.使用BufferedReader.close()或PrintStream.close()方法關(guān)閉輸入、輸出流??墒褂孟率霾襟E建立基于TCP的Client端客戶端應(yīng)用需要訪問計(jì)算機(jī)網(wǎng)絡(luò),因此還應(yīng)在AndroidManifest.xml清單文件為其添加如下代碼所示的網(wǎng)絡(luò)訪問權(quán)限。編譯并運(yùn)行程序,點(diǎn)擊“連接到服務(wù)器”按鈕,可以看到由服務(wù)器端在連接成功時(shí)返回的提示信息,如圖10-5所示。10.4.2基于UDP的Socket通信TCP是一種面向連接的傳輸協(xié)議,建立連接時(shí)要經(jīng)過三次握手,斷開連接也要經(jīng)過四次握手,中間傳輸數(shù)據(jù)時(shí)也要回復(fù)ACK包確認(rèn),多種機(jī)制保證了數(shù)據(jù)能夠正確到達(dá),不會(huì)丟失或出錯(cuò)。UDP則是一種非連接的傳輸協(xié)議,沒有建立連接和斷開連接的過程。它只是簡單地把數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)中,不需要ACK包確認(rèn)。基于UDP的Socket通信程序同樣包括服務(wù)器端和客戶端??蓞⒖枷率龃a設(shè)計(jì)基于UDP的服務(wù)器端。//創(chuàng)建服務(wù)端socket,并使之監(jiān)聽9999端口DatagramSocketsocket=newDatagramSocket(9999);byte'data[]=newbyte[1024];//準(zhǔn)備接收數(shù)據(jù)DatagramPacketpacket=newDatagramPacket(data,data.length);//接收到數(shù)據(jù)報(bào)文,并將報(bào)文中的數(shù)據(jù)復(fù)制到指定的DatagramPacket實(shí)例中socket.receive(packet);Strings=packet.getData();2//接收DatagramPacket實(shí)例中的數(shù)據(jù),轉(zhuǎn)換成字符串可參考下述代碼設(shè)計(jì)基于UDP的客戶端。DatagramSocketsocket=newDatagramSocket(9999);出//創(chuàng)建客戶端socketInetAddressserverAddress=InetAddress.getByName("211.699.1.1");//服務(wù)端地址
DatagramPacketpacket=newDatagramPacket(data,data.length,serverAddress,9999);//打包要發(fā)送的數(shù)據(jù)socket.send(packet);//發(fā)送DatagramPacket對(duì)象10.5藍(lán)牙通信藍(lán)牙是一種支持設(shè)備之間短距離通信的無線電通信技術(shù)。它能在包含移動(dòng)電話、PDA、無線耳機(jī)、筆記本電腦和藍(lán)牙打印機(jī)等眾多設(shè)備之間進(jìn)行無線信息交換。Android為支持藍(lán)牙開發(fā)提供了android.bluetooth包,它包括下述基礎(chǔ)類。1.BluetoothAdapter該類代表了一個(gè)本地藍(lán)牙適配器,它是所有藍(lán)牙交互的入口??墒褂迷擃愄峁┑姆椒òl(fā)現(xiàn)其它藍(lán)牙設(shè)備、查詢綁定的藍(lán)牙設(shè)備、使用已知MAC地址創(chuàng)建藍(lán)牙設(shè)備,以及建立一個(gè)BluetoothServerSocket來監(jiān)聽來自其它藍(lán)牙設(shè)備的連接。2.BluetoothDevice
該類代表了一個(gè)遠(yuǎn)程的藍(lán)牙設(shè)備,可使用該類提供的方法請(qǐng)求遠(yuǎn)端藍(lán)牙設(shè)備連接或獲取遠(yuǎn)端藍(lán)牙設(shè)備的名稱、地址、種類以及綁定狀態(tài)。表10-6是該類提供的常用常量,表10-7是該類提供的常用方法。
3.BluetoothSocket
該類代表了一個(gè)藍(lán)牙的套接字接口,它是應(yīng)用程序通過輸入流、輸出流與藍(lán)牙設(shè)備進(jìn)行通信的連接點(diǎn)。表10-8是該類提供的常用方法。
10.6WIFI通信Android為支持WIFI通信開發(fā)提供了.wifi包,它包括下述基礎(chǔ)類。ScanResult該類主要通過對(duì)WIFI網(wǎng)絡(luò)的掃描來獲得設(shè)備周邊的WIFI熱點(diǎn)信息,包括WIFI接入點(diǎn)地址、名稱、身份認(rèn)證和信號(hào)強(qiáng)度等信息。表10-9是該類常用的用于存儲(chǔ)WIFI信息的變量。WifiConfiguration該類主要用于設(shè)置WIFI網(wǎng)絡(luò)。表10-10是該類常用的用于配置WIFI信息的變量。WifiInfo該類主要用于獲得已經(jīng)連接的WIFI網(wǎng)絡(luò)的連接信息,包括網(wǎng)絡(luò)連接狀態(tài)、接入點(diǎn)IP地址、WIFI連接速度、接入點(diǎn)MAC地址以及網(wǎng)絡(luò)ID等。表10-11是該類提供的用于獲取WIFI連接信息的常用方法。WifiManager該類主要用于對(duì)WIFI連接進(jìn)行管理。表10-12是該類提供的常用常量,表10-13是該類提供的常用方法。習(xí)題(填空題)一、填空題1.
Ht
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商鋪轉(zhuǎn)租協(xié)議書
- 2025年全球及中國生物催化解決方案行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國貓用肝臟功能支持補(bǔ)充劑行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球單面撓性覆銅板行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國單體液晶行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 二零二五年度電視節(jié)目嘉賓邀請(qǐng)與參與合同范本4篇
- 專題05 語法填空30篇-2023-2024學(xué)年八年級(jí)英語下學(xué)期期中(原卷版)
- 跨省長途汽車旅客協(xié)議
- 2025幼兒園秋季安全協(xié)議簽署計(jì)劃
- 酒店裝修項(xiàng)目工種合同樣本
- 調(diào)料廠工作管理制度
- 2023年MRI技術(shù)操作規(guī)范
- 小學(xué)英語單詞匯總大全打印
- 醫(yī)療廢物集中處置技術(shù)規(guī)范
- 衛(wèi)生健康系統(tǒng)安全生產(chǎn)隱患全面排查
- GB/T 15114-2023鋁合金壓鑄件
- 三相分離器原理及操作
- 貨物驗(yàn)收單表格模板
- 600字A4標(biāo)準(zhǔn)作文紙
- GB/T 18015.2-2007數(shù)字通信用對(duì)絞或星絞多芯對(duì)稱電纜第2部分:水平層布線電纜分規(guī)范
- 2007年邁騰3.2發(fā)動(dòng)機(jī)維修手冊(cè)
評(píng)論
0/150
提交評(píng)論