使用Java藍牙無線通訊技術API(第一部分 -API概覽)(2).doc_第1頁
使用Java藍牙無線通訊技術API(第一部分 -API概覽)(2).doc_第2頁
使用Java藍牙無線通訊技術API(第一部分 -API概覽)(2).doc_第3頁
使用Java藍牙無線通訊技術API(第一部分 -API概覽)(2).doc_第4頁
使用Java藍牙無線通訊技術API(第一部分 -API概覽)(2).doc_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論