由於項目的原因。要在電腦上開發一個通過藍牙傳送數據的client。我採用的是JAVA,JSME開發。
client:去搜素藍牙信號,然后找到對應的藍牙信號進行連接。
服務端:client須要進行連接的藍牙信號。
在PCserver端還須要一個開源組件BlueCove。該組件實現了JSR-82 Java 藍牙規范,屏蔽了對底層操作系統級的本機藍牙協議棧各種功能的封裝。
之所以須要這個組件,主要是J2SE並未實現對JSR-82規范協議。
我用的是bluecove-2.0.3.jar。
還須要commons-io的jar包,我用的是2.2的jar包。
Java藍牙 API依賴java通用連接框架。一直一來這成為java 藍牙API應用的一個局限。可是,人們建議將GCF增加到J2SE中。
Java藍牙API使得訪問很多其它的系統成為可能。
Java藍牙API定義了兩個包:一個是Java藍牙API的核心javax.bluetooth。還有一個是用於對象交換協議的javax.obex(OBEX)。
不論什么藍牙應用都有下面這些組件:堆棧初始化組件,設備管理組件,設備發現組件。服務發現組件和通訊組件。
JSR82規范介紹了用於設備管理的兩個類:LocalDevice 和 RemoteDevice.
LocalDevice 同意你請求獲得藍牙設備的靜態信息。它依靠javax.bluetooth.DeviceClass類來獲得設備類型和它所提供的服務類型。
RemoteDevice可用來獲得藍牙鄰近區的設備信息(比如,某個遠程藍牙設備的地址)。
它能夠代表一台遠程設備(比如,一台在可到達范圍內的設備),並提供對應的方法來獲得關於這台設備的有關信息,包含它的藍牙地址和名稱。
每一個藍牙設備有一個唯一的硬件地址。像計算機的MAC地址一樣。你能夠設定設備發現的級別,通過調用LocalDevice 對象中的setDiscoverable()方法能夠使得其他藍牙設備發現當前設備。
設備發現
無線設備須要一種機制來同意它們發現其他的設備並訪問它們的功能。核心藍牙API的DiscoveryAgent 類和DiscoveryListener接口提供了須要的發現服務。有三種方式獲得可訪問設備列表。DiscoveryAgent.startInquiry()方法可將設備設置為查詢模式。為了充分利用這樣的模式,應用必須要指定一個事件監聽器來對與查詢相關的事件作出反應。當查詢完畢或取消時,會調用DiscoveryListener.inquiryCompleted()方法。
服務發現
服務發現同意你發現附近的服務。而無論哪一台設備提供的該服務。DiscoveryAgent提供的方法能夠用來發現藍牙服務設備上的服務。並初始化服務發現事務。
在服務能夠被發現曾經,必須首先在藍牙服務設備上注冊或廣播該服務。
服務設備負責完畢非常多任務,包含創建描寫敘述所提供的服務的服務記錄,接受來自client的連接,向服務設備的服務發現數據庫(SDDB)加入新的服務記錄。
我使用的軟件是我之前編android的ADT集成開發工具。
32位的java開發環境。
PC端使用的是藍牙適配器,安裝了BlueSoleil_.6.v6.4.249。
以下是我在PC端開發時遇到的問題
1.因為BlueCove沒有更新過的原因 ,該jar包僅僅在32的java環境下才干夠使用,64位的java開發環境會報錯。
1.Port mismarch [4]and [5]
說明:藍牙的虛擬port和你PC上的藍牙port不匹配

解決:
在藍牙適配器的“我的設備屬性”中--串口--僅僅留一個串口且自己主動連接為否,連接方向為連出
刪除其余的port號,或者直接通過經典藍牙界面將藍牙刪除。又一次搜索連接
2.connect failed
解決:
驅動沒安裝好,在設備管理器右鍵感嘆號選擇聯機安裝驅動就可以。
