版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目7藍(lán)牙小車——藍(lán)牙通信本項(xiàng)目學(xué)習(xí)任務(wù)Android經(jīng)典藍(lán)牙API的使用Android低功耗藍(lán)牙API的使用1.Android經(jīng)典藍(lán)牙API的使用藍(lán)牙技術(shù)是一種低成本低功耗的近距離無(wú)線通信技術(shù),能為手機(jī)、無(wú)線耳機(jī)、筆記本電腦及相關(guān)外設(shè)之間進(jìn)行無(wú)線信息交換。藍(lán)牙Bluetooth2兩個(gè)藍(lán)牙設(shè)備通信時(shí),必須一個(gè)為主角色,一個(gè)為從角色。當(dāng)一個(gè)藍(lán)牙設(shè)備以主角色發(fā)起通信時(shí),需要知道對(duì)方的地址、配對(duì)密碼等信息藍(lán)牙通信的一般步驟如下:?jiǎn)?dòng)藍(lán)牙設(shè)備掃描附近設(shè)備連接設(shè)備發(fā)送指令/接收指令關(guān)閉連接藍(lán)牙通信的步驟BluetoothBluetoothAdapter:本地藍(lán)牙適配器,是所有藍(lán)牙交互的入口點(diǎn),表示藍(lán)牙設(shè)備自身的一個(gè)藍(lán)牙設(shè)備適配器,整個(gè)系統(tǒng)只有一個(gè)藍(lán)牙適配器。通過(guò)它可以發(fā)現(xiàn)其他藍(lán)牙設(shè)備,查詢綁定(配對(duì))設(shè)備的列表,使用已知的Mac地址實(shí)例化BluetoothDevice以及創(chuàng)建BluetoothServerSocket用來(lái)偵聽(tīng)來(lái)自其他設(shè)備的通信。BluetoothDevice:表示遠(yuǎn)程的藍(lán)牙設(shè)備,利用它可以通過(guò)BluetoothSocket請(qǐng)求與某個(gè)遠(yuǎn)程設(shè)備建立連接,或查詢有關(guān)該設(shè)備的信息,例如設(shè)備的名稱、地址、綁定狀態(tài)等。藍(lán)牙開(kāi)發(fā)的主要類BluetoothBluetoothSocket:表示藍(lán)牙套接字接口(與TCPSocket相似),Android應(yīng)用可通過(guò)InputStream和OutputStream與其他藍(lán)牙設(shè)備交換數(shù)據(jù)。BluetoothServerSocket:表示用于偵聽(tīng)傳入請(qǐng)求的服務(wù)器套接字(類似于TCPServerSocket),要連接兩臺(tái)Android設(shè)備,其中一臺(tái)設(shè)備必須使用此類開(kāi)發(fā)一個(gè)服務(wù)器套接字。當(dāng)一臺(tái)遠(yuǎn)程藍(lán)牙設(shè)備向此設(shè)備發(fā)出連接請(qǐng)求時(shí),BluetoothServerSocket將會(huì)在接受連接后返回已連接的BluethoothSocket。藍(lán)牙開(kāi)發(fā)的主要類Bluetooth獲取本地藍(lán)牙適配器BluetoothAdaptermBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();打開(kāi)/關(guān)閉手機(jī)藍(lán)牙打開(kāi)手機(jī)藍(lán)牙:mBluetoothAdapter.enable();關(guān)閉手機(jī)藍(lán)牙:mBluetoothAdapter.disable();掃描/取消藍(lán)牙設(shè)備掃描藍(lán)牙設(shè)備:mBluetoothAdapter.startDiscovery();取消掃描藍(lán)牙設(shè)備,減少資源的消耗:mBluetoothAdapter.cancelDiscovery();藍(lán)牙相關(guān)操作Bluetooth添加藍(lán)牙廣播接受者:
IntentFilterfilter=newIntentFilter(); //開(kāi)始掃描的廣播
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); //掃描完成的廣播
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); //發(fā)現(xiàn)一個(gè)可用的設(shè)備的廣播
filter.addAction(BluetoothDevice.ACTION_FOUND); mBluetoothReceiver=newBluetoothReceiver(); //注冊(cè)監(jiān)聽(tīng)
registerReceiver(mBluetoothReceiver,filter);藍(lán)牙相關(guān)操作Bluetooth藍(lán)牙廣播接受者藍(lán)牙相關(guān)操作Bluetooth注銷廣播接受者藍(lán)牙相關(guān)操作Bluetooth連接設(shè)備藍(lán)牙相關(guān)操作Bluetooth發(fā)送數(shù)據(jù)藍(lán)牙相關(guān)操作Bluetooth接收數(shù)據(jù)藍(lán)牙相關(guān)操作Bluetooth2.Android低功耗藍(lán)牙API的使用低功耗藍(lán)牙低功耗藍(lán)牙,是藍(lán)牙技術(shù)聯(lián)盟設(shè)計(jì)和銷售的一種個(gè)人局域網(wǎng)技術(shù),相較經(jīng)典藍(lán)牙,低功耗藍(lán)牙在保持同等通信范圍的同時(shí)顯著降低功耗和成本。這一特性使得Android應(yīng)用程序能夠與一系列對(duì)能耗有著嚴(yán)格要求的BLE設(shè)備(如智能手環(huán)、藍(lán)牙耳機(jī)、近程傳感器、心率監(jiān)測(cè)器等)進(jìn)行高效通信。此外,BLE除了廣泛應(yīng)用于鄰近設(shè)備間進(jìn)行少量的數(shù)據(jù)傳輸之外,還可以與近程傳感器進(jìn)行交互,為其當(dāng)前所處位置提供個(gè)性化的服務(wù)。低功耗藍(lán)牙Android應(yīng)用中低功耗藍(lán)牙通信的流程與經(jīng)典藍(lán)牙通信流程類似,但是它們所使用的API并不完全相同。在Android4.3版本(API級(jí)別18)中,對(duì)藍(lán)牙低功耗(BLE)技術(shù)引入了內(nèi)置系統(tǒng)支持,并提供相應(yīng)的API,使得應(yīng)用程序可以方便地發(fā)現(xiàn)設(shè)備、查詢服務(wù)和傳輸信息。注意:當(dāng)用戶利用藍(lán)牙低功耗(BLE)將其Android設(shè)備與其他設(shè)備進(jìn)行配對(duì)時(shí),用戶設(shè)備上的所有應(yīng)用程序均可訪問(wèn)這兩個(gè)設(shè)備間傳輸?shù)臄?shù)據(jù),可在應(yīng)用層對(duì)數(shù)據(jù)進(jìn)行編碼加密,以確保數(shù)據(jù)安全性。關(guān)鍵術(shù)語(yǔ)和概念通用屬性配置文件(GATT)——GATT被視為一種通用的規(guī)范,其主要內(nèi)容是針對(duì)在BLE鏈路上發(fā)送和接收簡(jiǎn)短數(shù)據(jù)片段的特性,這些數(shù)據(jù)片段被稱為“屬性”。當(dāng)前,所有低功耗應(yīng)用配置文件均以GATT為基礎(chǔ)。藍(lán)牙特別興趣小組(BluetoothSIG)為低功耗設(shè)備定義了多種配置文件。這些配置文件作為描述設(shè)備在特定應(yīng)用中如何工作的規(guī)范,具有極為重要的意義。請(qǐng)注意,一臺(tái)設(shè)備可以實(shí)現(xiàn)多個(gè)配置文件。例如,一臺(tái)設(shè)備可能同時(shí)包含用于監(jiān)測(cè)心率和電池電量的應(yīng)用。關(guān)鍵術(shù)語(yǔ)和概念在BLE連接中,存在兩種核心角色:中央設(shè)備(Central)和外圍設(shè)備(Peripheral)。在建立連接的過(guò)程中,中央設(shè)備負(fù)責(zé)掃描和尋找可連接的外圍設(shè)備,而外圍設(shè)備則負(fù)責(zé)廣播自身以供中央設(shè)備發(fā)現(xiàn)。在BLE連接中,必須有一個(gè)設(shè)備扮演中央角色,另一個(gè)設(shè)備扮演外圍角色。當(dāng)兩個(gè)藍(lán)牙設(shè)備建立連接后,它們使用GATT(GenericAttributeProfile)協(xié)議進(jìn)行通信。在GATT協(xié)議中,存在兩種核心角色:GATT服務(wù)器(GATTServer)和GATT客戶端(GATTClient)。在建立連接后,這兩個(gè)角色決定了兩個(gè)設(shè)備如何相互通信。Android中BLE藍(lán)牙的使用(1)配置BLE使用權(quán)限BLE藍(lán)牙的使用需要在AndroidManifest中配置一些權(quán)限,常見(jiàn)的藍(lán)牙權(quán)限配置如下:<uses-permissionandroid:name="android.permission.BLUETOOTH"/>
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permissionandroid:name="android.permission.BLUETOOTH_CONNECT"/>
<uses-permissionandroid:name="android.permission.BLUETOOTH_SCAN"/>
上述權(quán)限中,BLUETOOTH是使用藍(lán)牙的權(quán)限,BLUETOOTH_ADMIN是啟動(dòng)設(shè)備發(fā)現(xiàn)或操縱藍(lán)牙的權(quán)限。BLE藍(lán)牙通常與位置相關(guān)聯(lián),因此經(jīng)常需要聲明ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION權(quán)限。此外,還有藍(lán)牙連接BLUETOOTH_CONNECT和藍(lán)牙掃描BLUETOOTH_SCAN的權(quán)限。如果需要聲明應(yīng)用僅適用于支持BLE的設(shè)備,需要在AndroidManifest中添加以下內(nèi)容:<uses-featureandroid:name="android.hardware.bluetooth_le"android:required="true"/>
如果希望應(yīng)用適用于不支持BLE的設(shè)備,則仍將此元素添加到應(yīng)用清單中,但設(shè)置required="false"。Android中BLE藍(lán)牙的使用(2)啟用BLE啟用BLE首先要獲取BluetoothAdapter,BluetoothAdapter是Android設(shè)備自身的藍(lán)牙適配器,整個(gè)系統(tǒng)有一個(gè)藍(lán)牙適配器??梢允褂胓etSystemService()返回BluetoothManager的實(shí)例,然后使用該實(shí)例獲取適配器。然后調(diào)用isEnabled(),檢查當(dāng)前是否已啟用藍(lán)牙。如果此方法返回false,則表示藍(lán)牙處于停用狀態(tài)。如果并未啟用,則提示用戶前往“Settings”啟用藍(lán)牙。Android中BLE藍(lán)牙的使用(3)查找BLE設(shè)備查找BLE設(shè)備可以使用startLeScan()方法,此方法將LeScanCallback作為參數(shù)。在LeScanCallback回調(diào)方法中會(huì)返回掃描的結(jié)果。掃描非常耗電,建議找到所需設(shè)備后,立即停止掃描。此外,不要進(jìn)行循環(huán)掃描,并設(shè)置掃描時(shí)間限制。如果需要掃描特定類型的外圍設(shè)備,則可調(diào)用startLeScan(UUID[],BluetoothAdapter.LeScanCallback),它會(huì)提供一組UUID對(duì)象,用于指定應(yīng)用支持的GATT服務(wù)。Android中BLE藍(lán)牙的使用(4)連接到GATT服務(wù)器在與BLE設(shè)備進(jìn)行交互之前,首先需要連接到GATT服務(wù)器,主要是藍(lán)牙BLE設(shè)備上特定的GATT服務(wù)器。Android應(yīng)用可以使用connectGatt()方法來(lái)進(jìn)行連接,該方法需要三個(gè)參數(shù):一個(gè)Context對(duì)象、autoConnect(布爾值,用于指示是否在可用時(shí)自動(dòng)將我們連接到的BLE設(shè)備)以及BluetoothGattCallback。Android應(yīng)用在此扮演了GATT客戶端的角色。BluetoothGattCallback用于向客戶端傳遞結(jié)果(例如連接狀態(tài))以及GATT客戶端的進(jìn)一步操作。Android中BLE藍(lán)牙的使用(5)讀取BLE屬性當(dāng)Android應(yīng)用成功連接到GATT服務(wù)器并發(fā)現(xiàn)服務(wù)后,應(yīng)用便可讀取和寫入屬性。(6)接收GATT通知BLE應(yīng)用通常會(huì)要求BLE設(shè)備上的特定特征發(fā)生變化時(shí)收到通知。使用setCharacteristicNotification()方法可以設(shè)置特征變化的通知。在啟用針對(duì)特定特性的通知后,一旦遠(yuǎn)程設(shè)備上的該特性發(fā)生更改,就會(huì)觸發(fā)onCharacteristicChanged()回調(diào)函數(shù)。(7)關(guān)閉客戶端應(yīng)用在應(yīng)用程序完成對(duì)BLE設(shè)備的使用后,應(yīng)調(diào)用close()方法,以便系統(tǒng)可以適當(dāng)?shù)蒯尫刨Y源。感謝觀看Thankyou項(xiàng)目8智能家居——網(wǎng)絡(luò)通信本項(xiàng)目學(xué)習(xí)任務(wù)TCP通信HTTP通信1.TCP通信的原理TCP協(xié)議是面向連接的通信協(xié)議,即在傳輸數(shù)據(jù)前先在發(fā)送端和接收端建立邏輯連接,然后再傳輸數(shù)據(jù),保證了兩臺(tái)計(jì)算機(jī)之間可靠無(wú)差錯(cuò)的數(shù)據(jù)傳輸。TCP協(xié)議傳送速度較慢,但傳送的數(shù)據(jù)比較可靠。由于TCP協(xié)議的面向連接特性,它可以保證傳輸數(shù)據(jù)的安全性和完整性,所以是一個(gè)被廣泛采用的協(xié)議,例如在下載文件時(shí),如果數(shù)據(jù)接收不完整,將會(huì)導(dǎo)致文件數(shù)據(jù)丟失而不能被打開(kāi),因此,下載文件時(shí)必須采用TCP協(xié)議。網(wǎng)絡(luò)編程基礎(chǔ)TCP通信同UDP通信一樣,都能實(shí)現(xiàn)兩臺(tái)計(jì)算機(jī)之間的通信,通信的兩端則都需要?jiǎng)?chuàng)建Socket對(duì)象。TCP通信與UDP通信的其中一個(gè)主要區(qū)別在于,UDP中只有發(fā)送端和接收端,不區(qū)分客戶端與服務(wù)器端,計(jì)算機(jī)之間可以任意地發(fā)送數(shù)據(jù);而TCP通信是嚴(yán)格區(qū)分客戶端與服務(wù)器端的,在通信時(shí),必須先由客戶端去連接服務(wù)器端才能實(shí)現(xiàn)通信,服務(wù)器端不可以主動(dòng)連接客戶端。TCP通信JDK中提供了ServerSocket類,表示服務(wù)器端;Socket類表示客戶端。通信時(shí),首先要?jiǎng)?chuàng)建代表服務(wù)器端的ServerSocket對(duì)象,該對(duì)象相當(dāng)于開(kāi)啟一個(gè)服務(wù),并等待客戶端的連接;然后創(chuàng)建代表客戶端的Socket對(duì)象,并向服務(wù)器端發(fā)出連接請(qǐng)求,服務(wù)器端響應(yīng)請(qǐng)求,兩者建立連接后可以正式進(jìn)行通信。2TCP通信ServerSocket()該構(gòu)造方法在創(chuàng)建ServerSocket對(duì)象時(shí)并沒(méi)有指定端口號(hào),使用時(shí)還需要調(diào)用bind(SocketAddressendpoint)方法將其綁定到指定的端口號(hào)上。ServerSocket(intport)該構(gòu)造方法在創(chuàng)建ServerSocket對(duì)象時(shí),可以綁定到指定的端口號(hào)上。如果port參數(shù)值為0,此時(shí)系統(tǒng)就會(huì)分配一個(gè)未被其他程序占用的端口號(hào)。由于客戶端需要根據(jù)指定的端口號(hào)來(lái)訪問(wèn)服務(wù)器端程序,因此端口號(hào)隨機(jī)分配的情況并不常用,通常都會(huì)給服務(wù)器端指定一個(gè)端口號(hào)。ServerSocket——常用構(gòu)造方法TCP通信ServerSocket——常用方法方法聲明功能描述Socketaccept()該方法用于等待客戶端的連接,在客戶端連接之前一直處于阻塞狀態(tài),如果有客戶端連接就會(huì)返回一個(gè)與之對(duì)應(yīng)的Socket對(duì)象InetAddressgetInetAddress()該方法用于返回一個(gè)InetAddress對(duì)象,該對(duì)象中封裝了ServerSocket綁定的IP地址booleanisClosed()該方法用于判斷ServerSocket對(duì)象是否為關(guān)閉狀態(tài),如果是關(guān)閉狀態(tài)則返回true,反之則返回falsevoidbind(SocketAddressendpoint)該方法用于將ServerSocket對(duì)象綁定到指定的IP地址和端口號(hào),其中參數(shù)endpoint封裝了IP地址和端口號(hào)TCP通信Socket()該構(gòu)造方法在創(chuàng)建Socket對(duì)象時(shí),并沒(méi)有指定IP地址和端口號(hào),創(chuàng)建對(duì)象后還需調(diào)用connect(SocketAddressendpoint)方法,才能完成與指定服務(wù)器端的連接,其中參數(shù)endpoint用于封裝IP地址和端口號(hào)。Socket(Stringhost,intport)該構(gòu)造方法在創(chuàng)建Socket對(duì)象時(shí),會(huì)根據(jù)參數(shù)去連接在指定地址和端口上運(yùn)行的服務(wù)器程序,其中參數(shù)host接收的是一個(gè)字符串類型的IP地址。Socket(InetAddressaddress,intport)該方法在使用上與第2個(gè)構(gòu)造方法類似,參數(shù)address用于接收一個(gè)InetAddress類型的對(duì)象,該對(duì)象用于封裝一個(gè)IP地址。Socket——常用構(gòu)造方法TCP通信Socket——常用方法方法聲明功能描述intgetPort()該方法用于返回此Socket連接的遠(yuǎn)程服務(wù)端的端口號(hào)InetAddressgetLocalAddress()該方法用于獲取Socket對(duì)象綁定的本地IP地址,并將IP地址封裝成InetAddress類型的對(duì)象返回voidclose()該方法用于關(guān)閉Socket連接,結(jié)束本次通信。在關(guān)閉Socket之前,應(yīng)將與Socket相關(guān)的所有的輸入/輸出流全部關(guān)閉,這是因?yàn)橐粋€(gè)良好的程序應(yīng)該在執(zhí)行完畢時(shí)釋放所有的資源InputStreamgetInputStream()該方法返回一個(gè)InputStream類型的輸入流對(duì)象。如果該對(duì)象是由服務(wù)器端的Socket返回,就用于讀取客戶端發(fā)送的數(shù)據(jù);反之,用于讀取服務(wù)器端發(fā)送的數(shù)據(jù)OutputStreamgetOutputStream()該方法返回一個(gè)OutputStream類型的輸出流對(duì)象。如果該對(duì)象是由服務(wù)器端的Socket返回,就用于向客戶端發(fā)送數(shù)據(jù);反之,用于向服務(wù)器端發(fā)送數(shù)據(jù)TCP通信服務(wù)端與客戶端通信圖:TCP通信基于TCP協(xié)議的Socket通信的步驟:服務(wù)器:1、創(chuàng)建ServerSocket,綁定一個(gè)監(jiān)聽(tīng)端口2、通過(guò)accept()方法監(jiān)聽(tīng)客戶端請(qǐng)求3、建立連接后,通過(guò)輸入流讀取客戶端數(shù)據(jù),通過(guò)輸出流向客戶端發(fā)送數(shù)據(jù)4、關(guān)閉輸入/輸出流,關(guān)閉Socket客戶端:1、創(chuàng)建Socket,需要指明服務(wù)器的IP地址和端口號(hào)2、建立連接后,通過(guò)輸出流向服務(wù)器發(fā)送數(shù)據(jù),通過(guò)輸入流讀取服務(wù)器的響應(yīng)信息3、關(guān)閉輸入輸出流,關(guān)閉SocketTCP通信2.HTTP通信HTTP簡(jiǎn)介HTTP全稱為超文本傳輸協(xié)議(HypertextTransferProtocol),是一種用于傳輸超文本(如網(wǎng)頁(yè))的協(xié)議。它是在互聯(lián)網(wǎng)上應(yīng)用最廣泛的一種網(wǎng)絡(luò)協(xié)議。HTTP的工作方式是基于請(qǐng)求和響應(yīng)的模型。在一個(gè)HTTP請(qǐng)求-響應(yīng)周期中,一個(gè)客戶端(如一個(gè)瀏覽器)會(huì)向服務(wù)器發(fā)送一個(gè)請(qǐng)求,這個(gè)請(qǐng)求可以包含一個(gè)獲取特定資源(如一個(gè)網(wǎng)頁(yè))的請(qǐng)求,也可以是提交其他類型數(shù)據(jù)的請(qǐng)求(如POST請(qǐng)求)。當(dāng)服務(wù)器收到這個(gè)請(qǐng)求后,它會(huì)處理這個(gè)請(qǐng)求并返回一個(gè)響應(yīng)。這個(gè)響應(yīng)可以是一個(gè)網(wǎng)頁(yè)的內(nèi)容,也可以是其他類型的數(shù)據(jù),如錯(cuò)誤消息或重定向指令等。HTTP簡(jiǎn)介HTTP為瀏覽器和App們提供了一個(gè)統(tǒng)一的接口,大量的App都在使用HTTP及其相關(guān)協(xié)議,確保網(wǎng)頁(yè)和App能方便的進(jìn)行通信。HTTP通常使用URL(UniformResourceLocator,統(tǒng)一資源定位地址)來(lái)請(qǐng)求數(shù)據(jù)或提交信息。URL是指向互聯(lián)網(wǎng)資源的指針,資源可以是簡(jiǎn)單的文件或目錄,也可以是對(duì)更復(fù)雜的對(duì)象的引用,例如對(duì)數(shù)據(jù)庫(kù)或搜索引擎的查詢。通常情況下,URL由協(xié)議名、主機(jī)、端口和資源組成,其格式為:protocal://host:port/resourceName。HTTP簡(jiǎn)介在客戶端與服務(wù)器進(jìn)行網(wǎng)絡(luò)通信的過(guò)程中,通常需要提供一些參數(shù)以指定所需訪問(wèn)的資源,不同的參數(shù)會(huì)導(dǎo)致請(qǐng)求不同的資源。在HTTP協(xié)議中,常用的請(qǐng)求類型主要有兩種,即GET和POST。這兩種請(qǐng)求類型在技術(shù)上的差異主要體現(xiàn)在瀏覽器或客戶端在處理和封裝請(qǐng)求信息時(shí)的方式上。HTTP簡(jiǎn)介GET方法通常用于從服務(wù)器獲取資源,這種請(qǐng)求不會(huì)對(duì)服務(wù)器上的數(shù)據(jù)造成任何更改。在這種情況下,參數(shù)的主要作用是告知服務(wù)器哪些數(shù)據(jù)可以提供作為響應(yīng)。這些參數(shù)被附加到請(qǐng)求的URL后面。使用GET方法發(fā)送的URL長(zhǎng)度通常不能超過(guò)1KB。在HTML頁(yè)面中,資源鏈接通常使用GET方法作為典型的實(shí)現(xiàn)方式。當(dāng)使用POST請(qǐng)求方法提交數(shù)據(jù)時(shí),所提交的數(shù)據(jù)以鍵值對(duì)的形式被封裝在請(qǐng)求的實(shí)體中。這種做法使得用戶無(wú)法通過(guò)瀏覽器直接查看發(fā)送的請(qǐng)求數(shù)據(jù)。因此,POST方式在安全性方面要比GET方式更為優(yōu)越。POST請(qǐng)求具有修改服務(wù)器端資源內(nèi)容的能力,例如處理表單、上傳文件等情況。HTTP簡(jiǎn)介在請(qǐng)求過(guò)程中,提供給服務(wù)器的參數(shù)分為兩種主要類型:請(qǐng)求參數(shù)和控制參數(shù)。請(qǐng)求參數(shù)是與特定的業(yè)務(wù)和內(nèi)容相關(guān)的信息,例如網(wǎng)絡(luò)服務(wù)器的地址,它作為請(qǐng)求參數(shù)提供了服務(wù)器可達(dá)的地址信息。除此之外,附加的查詢字符串以及使用POST方式進(jìn)行訪問(wèn)時(shí)所附加的參數(shù)等也屬于請(qǐng)求參數(shù)的范疇??刂茀?shù)則主要用于從技術(shù)角度對(duì)訪問(wèn)過(guò)程進(jìn)行控制,如設(shè)置訪問(wèn)超時(shí)時(shí)間、指定內(nèi)容編碼格式、向服務(wù)器提供當(dāng)前訪問(wèn)客戶端的類型等信息,都可以被歸類為控制參數(shù)。HTTP簡(jiǎn)介Android平臺(tái)為HTTP通信提供了全面的支持,通過(guò)標(biāo)準(zhǔn)的Java類HttpURLConnection來(lái)實(shí)現(xiàn)基于URL的請(qǐng)求和響應(yīng)功能。HttpURLConnection繼承自URLConnection類,它可以發(fā)送和接收各種類型和長(zhǎng)度的數(shù)據(jù),同時(shí)也可以靈活地設(shè)置請(qǐng)求方法、超時(shí)時(shí)間等參數(shù)。HTTP簡(jiǎn)介在真實(shí)的開(kāi)發(fā)過(guò)程中,當(dāng)手機(jī)端與服務(wù)器端進(jìn)行交互時(shí),不可避免地需要將中文數(shù)據(jù)提交到服務(wù)器,此時(shí)可能會(huì)出現(xiàn)中文亂碼的問(wèn)題。無(wú)論使用GET還是POST方法提交參數(shù),都需要對(duì)參數(shù)進(jìn)行編碼。至關(guān)重要的是,編碼方式必須與服務(wù)器端的解碼方式保持一致。同樣,在獲取服務(wù)器返回的中文字符時(shí),也需要使用特定的解碼格式進(jìn)行解碼。HTTP的數(shù)據(jù)解析與顯示HTTP請(qǐng)求后返回的數(shù)據(jù)有多種類型,常見(jiàn)的有HTML、JSON、XML、純文本、圖片、適配、PDF等。HTML網(wǎng)頁(yè)的顯示HTML網(wǎng)頁(yè)是HTTP請(qǐng)求后返回的最常見(jiàn)的數(shù)據(jù)類型,Android提供了WebView控件來(lái)解析和顯示網(wǎng)頁(yè)。WebView控件和其他控件類似,可以直接在XML布局文件中添加,也可以在Java代碼中添加。HTML網(wǎng)頁(yè)的顯示W(wǎng)ebView控件的常用方法有:loadUrl(Stringurl):加載URL對(duì)應(yīng)的網(wǎng)頁(yè)。loadData(Stringdata,StringmimeType,Stringencoding):將指定的字符串?dāng)?shù)據(jù)加載到瀏覽器中。capturePicture():創(chuàng)建當(dāng)前屏幕的快照。goBack():執(zhí)行后退操作。goForward():執(zhí)行前進(jìn)操作。stopLoading():停止加載當(dāng)前頁(yè)面。reload():重新加載當(dāng)前頁(yè)面。zoomIn():放大網(wǎng)頁(yè)。zoomOut():縮小網(wǎng)頁(yè)。addJavascriptInterface(Objectobject,Stringname):使用WebView中的JavaScript調(diào)用Android方法。JSON數(shù)據(jù)的解析Android應(yīng)用很多時(shí)候不需要顯示網(wǎng)頁(yè),只需要獲取數(shù)據(jù),將數(shù)據(jù)適配到Android的控件上。HTTP請(qǐng)求獲取的數(shù)據(jù)類型很多時(shí)候是JSON類型,JSON是一種新的數(shù)據(jù)格式,是一種輕量級(jí)的數(shù)據(jù)交互格式,JSON的文件拓展名一般為.json。JSON可以傳輸一個(gè)簡(jiǎn)單的數(shù)據(jù),也可以傳輸數(shù)組或?qū)ο?。JSON數(shù)據(jù)有兩種結(jié)構(gòu),分別是對(duì)象結(jié)構(gòu)和數(shù)組結(jié)構(gòu)。JSON數(shù)據(jù)的解析(1)對(duì)象結(jié)構(gòu)對(duì)象結(jié)構(gòu)以“{”開(kāi)始,以“}”結(jié)束,中間部分由以“,”分隔的鍵值對(duì)(key:value)構(gòu)成,最后一個(gè)鍵值對(duì)后邊不用加“,”,鍵(key)和值(value)之間以“:”分隔,以下是一個(gè)對(duì)象結(jié)構(gòu)的JSON數(shù)據(jù)示例:
上述JSON是一個(gè)對(duì)象結(jié)構(gòu),有三個(gè)鍵值對(duì),其中“city”的值為“Suzhou”,“temp”的值為26,“weather”的值為“cloudy”。{"city":"Suzhou","temp":2
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲業(yè)解除勞動(dòng)合同樣本
- 農(nóng)業(yè)技術(shù)聘用合同證明
- 倉(cāng)儲(chǔ)管理租賃代理合同
- 建筑行業(yè)專家聘用合同
- 小區(qū)玻璃施工合同范例
- 音響技術(shù)員勞動(dòng)合同三篇
- 配電柜制造設(shè)備承攬合同三篇
- 音樂(lè)錄制與發(fā)行合同三篇
- 退伙合同協(xié)議書范本甲乙丙
- 集體宿舍租賃合同一般寫幾字
- 路虎發(fā)現(xiàn)4說(shuō)明書
- 腎破裂保守治療護(hù)理查房
- 2024年避孕藥具計(jì)劃總結(jié)
- 新聞攝影課件
- 德能勤績(jī)考核表
- 收納箱注塑模具設(shè)計(jì)說(shuō)明書
- Python數(shù)據(jù)科學(xué)方法與實(shí)踐(山東聯(lián)盟)智慧樹(shù)知到課后章節(jié)答案2023年下山東師范大學(xué)
- 河南省鄭州市管城區(qū)卷2023-2024學(xué)年數(shù)學(xué)四年級(jí)第一學(xué)期期末聯(lián)考試題含答案
- 班主任考核細(xì)則評(píng)分表
- 2023教科版二年級(jí)上冊(cè)科學(xué)課堂作業(yè)本參考答案
- 乘坐飛機(jī)申請(qǐng)單
評(píng)論
0/150
提交評(píng)論