圖 10:本地設備類
本地設備提供了方法來返回關於本地設備的信息,並且能夠進入Bluetooth manager:
圖 11: 遠端設備類
遠端設備(RemoteDevice)提供的方法中,有些很類似於本地設備(LocalDevice)裡提供的方法:
圖 12: 通用連接框架和藍牙連接類型
層次定義了L2CAP和Stream的連接和連接通知器。一個連接定義了一個連接終端,當一個連接通知器執行了服務行為時,它會等待並接受L2CAP連接處理。btspp://hostname:[CN | UUID];parameters
btspp://hostname:[CN | UUID];parameters
細節介紹:
.btl2cap 是為L2CAPConnection設計的URL配置方案。
.btspp是為RFCOMM StreamConnection的URL配置方案。
.hostname 既可是localhost用於架設一個服務器連接,也可是一個用於創建客戶端連接的藍牙地址。
.PSM是協議/服務多路復用值,在一個客戶端連接服務器端時使用。在概念上是模擬一個TCP/IP端口。
.CN是信道數值,在一個客戶端連接服務器端時使用,也是模擬TCP/IP端口。
.UUID是UUID(通用唯一標識符)值,在一個服務器上建立服務時使用。
.parameters(參數)包括描述服務名稱的名字和有於安全的參數:驗證、授權和加密。
服務器連接和客戶端連接
在連接的URL中,主機名稱告訴連接工廠是否它應該創建一個客戶端異或服務器端。如果使用單詞localhost作為主機名將定義一個服務器連接。客戶端想要連接到一個指定的的服務可以通過調用ServiceRecord.getConnectionURL()來找到該服務連接的URL。
異常
Javax.bluetooth核心API定義了三個異常類:
.當一個藍牙L2CAP、RFCOMM或是OBEX-over-RFCOMM連接不能被成功建立會拋出BluetoothConnectionException異常。
.一個試圖在錯誤狀態下進行藍牙操作時,會拋出BluetoothStateException異常。
.當在本地服務發現數據庫(SDDB)中,添加或改變服務記錄失敗時,會拋出ServiceRegistrationException異常。
藍牙安全
一個安全的藍牙連接應該是經過驗證、可選的獲得授權和被加密過的。這樣,藍牙連接在建立之初或以後就可以保證其安全性了。
注意:不是所有的藍牙實現都提供了安全連接的。
為了在建立一個藍牙連接時使其安全,就要給Javax.microedition.io.Connector在連接URL字符串上提供適當的安全參數:
btspp://hostname:[CN | UUID];authenticate=true;authorize=true;encrypt=true
Where:
.authenticate驗證一個連接設備的身份。
.authorize授權一個連接中的設備(已被識別)是否被允許進入。
.encrypt指定連接需被加密。
你已經看到了想要連接到一個服務的客戶端可以通過調用ServiceRecord.getConnectionURL()方法以獲得服務連接的URL。該方法中的一個參數requiredSecurity,指定了返回的這個連接URL是否應該包含可選的authenticate和encrypt等安全參數。關於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)是設備上的一個管理軟件,它負責在作為授權中心改變本地藍牙的設置,包括:打開或關閉藍牙無線電,設置友好名稱以便在設備發現過程中進行廣播,開啟或屏蔽設備的發現模式,設置PIN碼,設置缺省安全屬性等等。BCC看上去表現如何全看實現的具體情況。
在Sun Wireless Toolkit中對藍牙的支持
J2ME Wireless Toolkit 2.2支持JABWT。toolkit的Preferences Utility(使用偏好)提供了新的Bluetooth/OBEX標簽以進行藍牙參數設置。在此欄下OBEX設置和三個藍牙子標簽,它們分別是:Internal Properties(內部屬性)標簽允許你設置設備搜索的超時時間,System Properties(系統屬性)標簽允許你定義一些調用LocalDevice.getProperty()方法便可得到藍牙屬性。BCC PropertIEs