Java 藍牙無線API 簡介

原文地址: 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() and getAttributeValue() 獲取服務記錄屬性。
  • getConnectionURL()獲取資源連接URL。
  • getHostDevice() 獲取服務設備信息。
  • populateRecord() and setAttributeValue() 設置記錄屬性。
  • 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()獲取服務級別

設備被發現以後,其級別也會被發現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章