利用於無線藍牙技巧尺度的Java APIs(JABWT),由JSR 82 規范定義,支撐快速開發便捷、安全及用處廣泛的藍牙利用。無線設備生產商已對JABWT規范做出反應,他們頒布移動手機和其它產品將支撐JABWT利用。
本文我們首先先容在移動設備上進行java開發的基礎原理,然後描寫如作甚藍牙通信編寫Java利用。
Java 藍牙 API
Java藍牙 API依附java通用連接框架,一直一來這成為java 藍牙API利用的一個局限。但是,人們建議將GCF加進到J2SE中。Java藍牙API使得拜訪更多的系統成為可能。
Java藍牙API定義了兩個包:一個是Java藍牙API的核心javax.bluetooth,另一個是用於對象交換協議的Javax.obex(OBEX)。
根據JSR 82 規范,所有埋伏藍牙系統都必需支撐藍牙把持中心(BCC),該把持中心是一個把持面板,它的作用類似於可以讓用戶或OEM給堆棧中的某些配置參數定義具體值得利用程序,特別是,它將利用於堆棧初始化中。
任何藍牙利用都有以下這些組件:堆棧初始化組件,設備治理組件,設備發明組件,服務發明組件和通信組件。
堆棧初始化
在開端無線通信之前,你需要以銷售商預訂的方法初始化藍牙設備。(具體的堆棧初始化步驟超出了藍牙API規范的范疇。)
在一篇關於java與藍牙技巧起步的Java.Net文章中,Bruce Hopkins(java與藍牙技巧的作者)向我們先容了在Atinav Java藍牙開發平台上是如何通過一系列設置完成初始化工作的。(見列表A),在JSR 82規范不包含這些調用,這一點很重要,由於其它的JSR82實現可能包含其它的初始化堆棧的方法。
設備治理
JSR82規范先容了用於設備治理的兩個類:LocalDevice 和 RemoteDevice.
LocalDevice 答應你懇求獲得藍牙設備的靜態信息。它依附Javax.bluetooth.DeviceClass類來獲得設備類型和它所供給的服務類型。
RemoteDevice可用來獲得藍牙附近區的設備信息(例如,某個遠程藍牙設備的地址)。它可以代表一台遠程設備(例如,一台在可達到范疇內的設備),並供給相應的方法來獲得關於這台設備的有關信息,包含它的藍牙地址和名稱。
每個藍牙設備有一個唯一的硬件地址,像盤算機的Mac地址一樣。你可以設定設備發明的級別,通過調用LocalDevice 對象中的setDiscoverable()方法可以使得其它藍牙設備發明當前設備。( 見列表B)
設備發明
無線設備需要一種機制來答應它們發明其它的設備並拜訪它們的功效。核心藍牙API的DiscoveryAgent 類和DiscoveryListener接口供給了需要的發明服務。有三種方法獲得可拜訪設備列表。DiscoveryAgent.startInquiry()方法可將設備設置為查詢模式,為了充分利用這種模式,利用必需要指定一個事件*********來對與查詢相干的事件作出反應。當查詢完成或取消時,會調用DiscoveryListener.inquiryCompleted()方法。
假如一台設備不想等候發明其它的設備,可以應用DiscoveryAgent.retrIEveDevices()方法來獲得一個已經存在的列表。該方法或者返回一個在前面的查詢中發明的設備列表,或者返回一個預知的設備列表,這些設備是由本地設備提前告訴藍牙把持中心的它經常接洽的設備。返回那種列表取決於傳遞的參數。列表C演示了最簡略的一種方法,當檢測到一台新的藍牙設備時,對象需要應用DiscoveryAgent通過DiscoveryListener接口通知你。
服務發明
服務發明答應你發明四周的服務,而不管哪一台設備供給的該服務。DiscoveryAgent供給的方法可以用來發明藍牙服務設備上的服務,並初始化服務發明事務。在服務可以被發明以前,必需首先在藍牙服務設備上注冊或廣播該服務。服務設備負責完成許多任務,包含創立描寫所供給的服務的服務記錄,接收來自客戶真個連接,向服務設備的服務發明數據庫(SDDB)添加新的服務記錄。總之,它的工作類似於web服務器。列表D是服務注冊的一個例子。
通信
兩台設備必需共享通用的通信協議才干通信。為了利用能夠拜訪更多的藍牙服務,藍牙Java API供給了這樣一個機制,它答應連接到應用RFCOMM, L2CAP, 或 OBEX協議的任何服務。假如服務應用了位於上面協議之上其它的協議(例如TCP/IP),只有在利用中利用CLDC通用連接框架實現額外的協議,才可以拜訪該服務。
用於服務記錄的URL包含數字和符號,大體是這樣的結構:
btspp://508031205080110F1B1B1D1C100:8.它的意思是客戶應當應用藍牙串口框架來建立到地址為508031205080110F1B1B1D1C100的設備的8號服務。設備地址和盤算機的物理地址類似,列表E顯示了簡略的RFCOMM連接。
Peter V. Mikhalenko是sun公司認證的專業IT職員,是Deutsche銀行的業務參謀。
列表A
import Javax.bluetooth.*; import Javax.microedition.io.*; import com.atinav.bcc.*; . . . BCC.setPortName("COM1"); BCC.setBaudRate(57600); BCC.setConnectable(true); BCC.setDiscoverable(DiscoveryAgent.GIAC); . . .列表B
. . . // retrIEve the local Bluetooth device object LocalDevice local = LocalDevice.getLocalDevice(); // retrIEve the name of the local Bluetooth device String name = local.getFrIEndlyName(); . . .列表C
. . . LocalDevicelocaldevice = LocalDevice.getLocalDevice(); DiscoveryAgentdiscoveryAgent = localdevice.getDiscoveryAgent(); discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this); . . .列表D
... // Service registration // invoke Connector.open with a server connection URL argument StreamConnectionNotifIEr service = (StreamConnectionNotifIEr) Connector.open("someURL"); // Obtain the service record created by the server device ServiceRecordsr = local.getRecord(service); // Indicate that the service is ready to accept a clIEnt connection. //acceptAndOpen() blocks // until a clIEnt connects. StreamConnection connection = (StreamConnection) service.acceptAndOpen (); // DO SOME Exchange HERE service.close();