原文地址: http://www.oracle.com/technetwork/articles/javame/index-156193.html
JSP 82 實際上指明瞭兩個獨立可選的Java包:核心藍牙接口(core Bluetooth API)和對象交換接口( Object Exchange (OBEX) API)。這裏主要關注前者javax.bluetooth
。
藍牙開發用例主要有:
- Initialization – 初始化,支持藍牙的設備必須首先初始化藍牙棧。
- Client – 客戶端服務。它搜索附近的可用設備並連接。
- Server – 服務端,爲客戶端提供服務。服務端將客戶端註冊進服務發現數據庫SDDB來等待發送數據。它接收客戶端的連接請求,如果後面不連接了就從數據庫刪掉。
客戶端設備使用 JABWT discovery API搜索附近設備。 DiscoveryAgent
類可用來發現設備或者服務。如果要在被發現服務後接受通知,需要實現 DiscoveryListener
接口。
使用 DiscoveryAgent
類的設備有如下方法發現設備:
-
retrieveDevices()
獲取附近設備; -
startInquiry()
初始化設備發現,稱爲 inquiry. -
cancelInquiry()
取消進行中的搜索。
有如下方法發現服務:
-
selectService()
初始化服務發現; -
searchServices()
初始化服務發現; -
cancelServiceSearch()
取消搜索。
實現 DiscoveryListener在
設備搜索階段有兩個方法可用:
deviceDiscovered()表明設備是否被發現;
inquiryCompleted()表明搜索的結果。
有如下方法在服務搜索階段:
-
servicesDiscovered()
表明服務被發現; serviceSearchCompleted()表明搜索已完成。
服務發現的核心是服務發下數據庫SDDB和服務發現協議SDP。數據庫由藍牙模塊維護,有一個服務記錄表記載可用的服務。而協議是用來發現服務的。藍牙通過SDP協議向附近社保請求其服務記錄表信息。
每個服務記錄表對應一個 ServiceRecord
實例。該類有如下方法:
-
getAttributeIDs()
andgetAttributeValue()
獲取服務記錄屬性。 getConnectionURL()獲取資源連接URL。
-
getHostDevice()
獲取服務設備信息。 -
populateRecord()
andsetAttributeValue()
設置記錄屬性。 setDeviceServiceClasses()設置服務級別。
設備管理有三個類:
LocalDevice
RemoteDevice
DeviceClass
LocalDevice
用來獲取本機設備信息(RemoteDevice也類似):
-
getBluetoothAddress()
藍牙地址 -
getDeviceClass()
設備級別 -
getFriendlyName()
別名 -
getRecord()
服務記錄表 updateRecord()更新記錄表
-
getDiscoverable()
可發現狀態 -
setDiscoverable()
設置狀態 -
getDiscoveryAgent()
發現代理 getProperty()設備藍牙屬性
藍牙屬性通過如下字段獲取:
-
bluetooth.api.version
,藍牙API版本 -
bluetooth.sd.attr.retrievable.max
,服務記錄表最大連接數 -
bluetooth.connected.devices.max
,設備最大連接數 -
bluetooth.sd.trans.max
, 最大服務發現併發數
DeviceClass
有如下方法:
-
getMajorDeviceClass()
獲取設備最小級別; -
getMinorDeviceClass()
獲取最大級別; -
getServiceClasses()獲取服務級別
。
設備被發現以後,其級別也會被發現。