PC端 java 開發藍芽所遇到的問題,pcjava
因為項目的原因,要在電腦上開發一個通過藍芽傳送資料的用戶端,我採用的是JAVA,JSME開發。
用戶端:去搜素藍芽訊號,然後找到相應的藍芽訊號進行串連。
服務端:用戶端需要進行串連的藍芽訊號。
在PC伺服器端還需要一個開源組件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提供的方法可以用來發現藍芽服務裝置上的服務,並初始化服務發現事務。在服務可以被發現以前,必須首先在藍芽服務裝置上註冊或廣播該服務。服務裝置負責完成很多任務,包括建立描述所提供的服務的服務記錄,接受來自用戶端的串連,向服務裝置的服務探索資料庫(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]
說明:藍芽的虛擬連接埠和你PC上的藍芽連接埠不匹配
解決:
在藍芽適配器的“我的裝置屬性”中--串口--只留一個串口且自動連接為否,串連方向為連出
刪除其餘的連接埠號碼,或者直接通過經典藍芽介面將藍芽刪除,重新搜尋串連
2.connect failed
解決:
驅動沒安裝好,在裝置管理員右鍵驚嘆號選擇聯機安裝驅動即可。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。