使用Java藍(lán)牙無(wú)線通訊技術(shù)API(第一部分 -API概覽)(2).doc_第1頁(yè)
使用Java藍(lán)牙無(wú)線通訊技術(shù)API(第一部分 -API概覽)(2).doc_第2頁(yè)
使用Java藍(lán)牙無(wú)線通訊技術(shù)API(第一部分 -API概覽)(2).doc_第3頁(yè)
使用Java藍(lán)牙無(wú)線通訊技術(shù)API(第一部分 -API概覽)(2).doc_第4頁(yè)
使用Java藍(lán)牙無(wú)線通訊技術(shù)API(第一部分 -API概覽)(2).doc_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

使用Java藍(lán)牙無(wú)線通訊技術(shù)API(第一部分-API概覽)(2) 作者:C.Enriqu文章來(lái)源:SUNDeveloper點(diǎn)擊數(shù):11922更新時(shí)間:2005-5-14 數(shù)據(jù)元素類 一個(gè)服務(wù)可以有許多的屬性,一些是強(qiáng)制性的,其他的是可選的。一個(gè)服務(wù)屬性由一個(gè)數(shù)據(jù)元素對(duì)象來(lái)表現(xiàn),這個(gè)數(shù)據(jù)元素對(duì)象提供了設(shè)置并取得屬性值的方法。 強(qiáng)制性屬性是在注冊(cè)一個(gè)服務(wù)之后被自動(dòng)設(shè)定的。這些屬性包括:ServiceRecordHandle,ServiceClassIDList, ServiceRecordState, ServiceID, 還有 ProtocolDescriptorList。 如果你想要的話,還可以設(shè)置可選屬性??蛇x屬性有很多,但是有三個(gè)值得關(guān)注:ServiceName,ServiceDescription, 和 ProviderName。 想得到更多的關(guān)于這些屬性的信息,請(qǐng)參看JABWT的文檔或藍(lán)牙規(guī)范。設(shè)備管理API 有3個(gè)主要的類來(lái)支持設(shè)備管理: .LocalDevice .RemoteDevice .DeviceClass 本地設(shè)備類LocalDevice類標(biāo)識(shí)了本地藍(lán)牙設(shè)備。藍(lán)牙應(yīng)用程序和LocalDevice之間的關(guān)系是典型的一對(duì)一關(guān)系:圖 10:本地設(shè)備類本地設(shè)備提供了方法來(lái)返回關(guān)于本地設(shè)備的信息,并且能夠進(jìn)入Bluetooth manager: .getBluetoothAddress()返回藍(lán)牙設(shè)備地址。 .getDeviceClass()返回設(shè)備類。 .getFriendlyName()返回設(shè)備友好名稱,藍(lán)牙設(shè)備名通常是用戶在藍(lán)牙控制中心為其設(shè)置的我們將會(huì)在后面看到。 .getRecord()返回一個(gè)指定藍(lán)牙連接的服務(wù)記錄。 .updateRecord()方法用來(lái)為指定的ServiceRecord更新SDDB服務(wù)記錄。 .getDiscoverable()返回設(shè)備的可發(fā)現(xiàn)狀態(tài)。 .setDiscoverable()設(shè)置設(shè)備的可發(fā)現(xiàn)狀態(tài)。 .getDiscoveryAgent()返回一個(gè)參考給發(fā)現(xiàn)代理。 .getProperty()返回一個(gè)設(shè)備的藍(lán)牙屬性通過(guò)調(diào)用getProperty()方法你可以得到的屬性包括: .bluetooth.api.version,藍(lán)牙API版本 .bluetooth.sd.attr.retrievable.max,一次性能夠被獲得的服務(wù)記錄屬性的最大值 .bluetooth.connected.devices.max,支持的連接設(shè)備的最大值 .bluetooth.sd.trans.max,同時(shí)發(fā)生的服務(wù)發(fā)現(xiàn)處理的最大值 .bluetooth.l2cap.receiveMTU.max,L2CAP最大發(fā)射單元你可以在Javadoc文檔中或是規(guī)范中學(xué)習(xí)更多的有關(guān)藍(lán)牙屬性的內(nèi)容。遠(yuǎn)端設(shè)備類 一個(gè)RemoteDevice的實(shí)例代表了一個(gè)遠(yuǎn)端藍(lán)牙設(shè)備。在一個(gè)藍(lán)牙客戶端應(yīng)用程序可以進(jìn)行服務(wù),消費(fèi)之前,它必須發(fā)送一個(gè)設(shè)備請(qǐng)求來(lái)發(fā)現(xiàn)遠(yuǎn)端設(shè)備。典型的藍(lán)牙應(yīng)用程序和遠(yuǎn)端設(shè)備之間的關(guān)系是一對(duì)多:圖 11: 遠(yuǎn)端設(shè)備類遠(yuǎn)端設(shè)備(RemoteDevice)提供的方法中,有些很類似于本地設(shè)備(LocalDevice)里提供的方法: .getBluetoothAddress()返回藍(lán)牙地址。 .getFriendlyName()返回藍(lán)牙設(shè)備名。 .getRemoteDevice()返回相應(yīng)的被指定藍(lán)牙連接的遠(yuǎn)端設(shè)備。 .authenticate()嘗試識(shí)別驗(yàn)證遠(yuǎn)端設(shè)備。 .authorize()為指定的藍(lán)牙連接去嘗試批準(zhǔn)遠(yuǎn)端設(shè)備訪問(wèn)本地設(shè)備。 .encrypt()嘗試為指定的藍(lán)牙連接開(kāi)啟或關(guān)閉加密。 .isAuthenticated()測(cè)試是否遠(yuǎn)端設(shè)備可以被驗(yàn)證。 .isAuthorized()測(cè)試是否遠(yuǎn)端設(shè)備已經(jīng)被藍(lán)牙控制中心授權(quán)訪問(wèn)本地設(shè)備以進(jìn)行藍(lán)牙連接。 .isEncrypted()測(cè)試是否本地設(shè)備和遠(yuǎn)端設(shè)備之間的通信被加密。 .isTrustedDevice()測(cè)試是否遠(yuǎn)端設(shè)備被藍(lán)牙控制中心指定為可信任的。DeviceClass類 一個(gè)DeviceClass對(duì)象代表一個(gè)設(shè)備的設(shè)備類(CoD),例如一個(gè)打印機(jī)或者一部電話。CoD包括一個(gè)主類,一個(gè)輔的類,和服務(wù)類型或服務(wù)類。DeviceClass提供了如下方法: .getMajorDeviceClass()方法獲取設(shè)備的主類。 .getMinorDeviceClass()方法獲取設(shè)備的輔類。 .getServiceClasses()獲取設(shè)備的服務(wù)類。當(dāng)一個(gè)設(shè)備被發(fā)現(xiàn),同時(shí)他的類也會(huì)被發(fā)現(xiàn);當(dāng)發(fā)現(xiàn)代理調(diào)用deviceDiscovered()時(shí),其中一個(gè)參數(shù)就是DeviceClass。你可以通過(guò)它的getDeviceClass()方法找到本地設(shè)備的CoD。藍(lán)牙通信 JABWT連接是基于邏輯鏈路及適配層協(xié)議的。L2CAP是一個(gè)低級(jí)協(xié)議用來(lái)管理數(shù)據(jù)包,直到達(dá)到64k。L2CAP中的處理細(xì)節(jié)像消息分割和重組(SAR),多路連接。另外,串口Profile(SPP)提供RFCOMM,一個(gè)通過(guò)L2CAP層的串行模擬協(xié)議。 L2CAP和RFCOMM連接都是基于通用連接框架(GCF)的,直接通向接口和類的層次去創(chuàng)建連接和執(zhí)行IO命令。JABWT依靠L2CAP和RFCOMM協(xié)議擴(kuò)展了通用連接框架(GCF)以分別支持通過(guò)L2CAPConnection 和StreamConnection類型連接。就在L2CAPConnection被JSR 82介紹的同時(shí),StreamConnection在原始的javax.microedition.io的GCF中被定義了,它是依靠CLDC發(fā)展來(lái)的。注意,JABWT中L2CAPConnection僅支持面向連接的L2CAP連接。圖12顯示了以基于GCF形式的各接口通過(guò)藍(lán)牙網(wǎng)絡(luò)進(jìn)行通信的過(guò)程:圖 12: 通用連接框架和藍(lán)牙連接類型 層次定義了L2CAP和Stream的連接和連接通知器。一個(gè)連接定義了一個(gè)連接終端,當(dāng)一個(gè)連接通知器執(zhí)行了服務(wù)行為時(shí),它會(huì)等待并接受L2CAP連接處理。 處理L2CAP連接比處理流連接更復(fù)雜。使用L2CAP時(shí),開(kāi)發(fā)者們必須處理好最大消息的大?。醋畲髠鬏攩挝?,或叫做MTU)、打斷和重組等。這些復(fù)雜的事項(xiàng)在開(kāi)發(fā)者使用流連接的時(shí)候被隱藏了,以使他們處理藍(lán)牙連通時(shí)獲得更好的效率。 如同所有的GCF連接類型,你可以通過(guò)調(diào)用GCF連接工廠方法javax.microedition.io.Connector創(chuàng)建藍(lán)牙連接。傳遞給Connector()方法的連接URL決定了要?jiǎng)?chuàng)建的連接類型:一個(gè)L2CAPConnection連接的URL格式:btspp:/hostname:CN | UUID;parameters一個(gè)RFCOMMStreamConnection連接的URL格式:btspp:/hostname:CN | UUID;parameters細(xì)節(jié)介紹: .btl2cap 是為L(zhǎng)2CAPConnection設(shè)計(jì)的URL配置方案。 .btspp是為RFCOMM StreamConnection的URL配置方案。 .hostname 既可是localhost用于架設(shè)一個(gè)服務(wù)器連接,也可是一個(gè)用于創(chuàng)建客戶端連接的藍(lán)牙地址。 .PSM是協(xié)議/服務(wù)多路復(fù)用值,在一個(gè)客戶端連接服務(wù)器端時(shí)使用。在概念上是模擬一個(gè)TCP/IP端口。 .CN是信道數(shù)值,在一個(gè)客戶端連接服務(wù)器端時(shí)使用,也是模擬TCP/IP端口。 .UUID是UUID(通用唯一標(biāo)識(shí)符)值,在一個(gè)服務(wù)器上建立服務(wù)時(shí)使用。 .parameters(參數(shù))包括描述服務(wù)名稱的名字和有于安全的參數(shù):驗(yàn)證、授權(quán)和加密。服務(wù)器連接和客戶端連接在連接的URL中,主機(jī)名稱告訴連接工廠是否它應(yīng)該創(chuàng)建一個(gè)客戶端異或服務(wù)器端。如果使用單詞localhost作為主機(jī)名將定義一個(gè)服務(wù)器連接??蛻舳讼胍B接到一個(gè)指定的的服務(wù)可以通過(guò)調(diào)用ServiceRecord.getConnectionURL()來(lái)找到該服務(wù)連接的URL。異常 javax.bluetooth核心API定義了三個(gè)異常類: .當(dāng)一個(gè)藍(lán)牙L2CAP、RFCOMM或是OBEX-over-RFCOMM連接不能被成功建立會(huì)拋出BluetoothConnectionException異常。 .一個(gè)試圖在錯(cuò)誤狀態(tài)下進(jìn)行藍(lán)牙操作時(shí),會(huì)拋出BluetoothStateException異常。 .當(dāng)在本地服務(wù)發(fā)現(xiàn)數(shù)據(jù)庫(kù)(SDDB)中,添加或改變服務(wù)記錄失敗時(shí),會(huì)拋出ServiceRegistrationException異常。藍(lán)牙安全 一個(gè)安全的藍(lán)牙連接應(yīng)該是經(jīng)過(guò)驗(yàn)證、可選的獲得授權(quán)和被加密過(guò)的。這樣,藍(lán)牙連接在建立之初或以后就可以保證其安全性了。注意:不是所有的藍(lán)牙實(shí)現(xiàn)都提供了安全連接的。為了在建立一個(gè)藍(lán)牙連接時(shí)使其安全,就要給javax.microedition.io.Connector在連接URL字符串上提供適當(dāng)?shù)陌踩珔?shù): btspp:/hostname:CN | UUID;authenticate=true;authorize=true;encrypt=trueWhere: .authenticate驗(yàn)證一個(gè)連接設(shè)備的身份。 .authorize授權(quán)一個(gè)連接中的設(shè)備(已被識(shí)別)是否被允許進(jìn)入。 .encrypt指定連接需被加密。你已經(jīng)看到了想要連接到一個(gè)服務(wù)的客戶端可以通過(guò)調(diào)用ServiceRecord.getConnectionURL()方法以獲得服務(wù)連接的URL。該方法中的一個(gè)參數(shù)requiredSecurity,指定了返回的這個(gè)連接URL是否應(yīng)該包含可選的authenticate和encrypt等安全參數(shù)。關(guān)于requiredSecurity的有效值為:.ServiceRecord.NOAUTHENTICATE_NOENCRYPT意為authenticate=false; encrypt=false。.ServiceRecord.AUTHENTICATE_NOENCRYPT意為authenticate=true; encrypt=false。.ServiceRecord.AUTHENTICATE_ENCRYPT意為authenticate=true; encrypt=true。例如:.ServiceRecord sr = .;.String connURL = sr.getConnectionURL(ServiceRecord.AUTHENTICATE_ENCRYPT, false);. 如果不在建立一個(gè)連接的時(shí)候就使用這種方法保證安全性,你也可以在以后確保其安全性,這就要使用一組已知的遠(yuǎn)端設(shè)備的安全方法:authenticate(),authorize()和 encrypt()。如果你這樣做了請(qǐng)注意,驗(yàn)證必須在授權(quán)和加密之前進(jìn)行。藍(lán)牙控制中心 藍(lán)牙控制中心(BCC)是設(shè)備上的一個(gè)管理軟件,它負(fù)責(zé)在作為授權(quán)中心改變本地藍(lán)牙的設(shè)置,包括:打開(kāi)或關(guān)閉藍(lán)牙無(wú)線電,設(shè)置友好名稱以便在設(shè)備發(fā)現(xiàn)過(guò)程中進(jìn)行廣播,開(kāi)啟或屏蔽設(shè)備的發(fā)現(xiàn)模式,設(shè)置PIN碼,設(shè)置缺省安全屬性等等。BCC看上去表現(xiàn)如何全看實(shí)現(xiàn)的具體情況。在Sun Wireless Toolkit中對(duì)藍(lán)牙的支持 J2ME

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論