java藍牙API

java藍牙API

藍牙API(ApplicationProgrammingInterface,應用程式編程接口)是一套用來控制藍牙的各個部件(從視窗的外觀到為一個新進程分配的記憶體)的外觀和行為的一套預先定義的函式.用戶的每個動作都會引發一個或幾個函式的運行以告訴藍牙和作業系統發生了什麼。

Java藍牙API概述

Java藍牙API依賴java通用連線框架,一直一來這成為java藍牙API套用的一個局限。但是,人們建議將GCF加入到J2SE中。Java藍牙API使得訪問更多的系統成為可能。

Java藍牙API定義了兩個包:一個是Java藍牙API的核心javax.bluetooth,另一個是用於對象交換協定的javax.obex(OBEX)。

根據JSR82規範,所有潛在藍牙系統都必須支持藍牙控制中心(BCC),該控制中心是一個控制臺,它的作用類似於可以讓用戶或OEM給堆疊中的某些配置參數定義具體值得應用程式,特別是,它將套用於堆疊初始化中。

Java藍牙API組件

任何藍牙套用都有以下這些組件:堆疊初始化組件,設備管理組件,設備發現組件,服務發現組件和通訊組件

堆疊初始化

在開始無線通訊之前,你需要以銷售商預訂的方式初始化藍牙設備。(具體的堆疊初始化步驟超出了藍牙API規範的範圍。)

在一篇關於java與藍牙技術起步的java.net文章中,BruceHopkins(java與藍牙技術的作者)向我們介紹了在Atinavjava藍牙開發平台上是如何通過一系列設定完成初始化工作的。(見列表A)在JSR82規範不包含這些調用,這一點很重要,因為其它的JSR82實現可能包括其它的初始化堆疊的方式。

設備管理

java藍牙API java藍牙API

服務發現允許你發現附近的服務,而不管哪一台設備提供的該服務。DiscoveryAgent提供的方法可以用來發現藍牙服務設備上的服務,並初始化服務發現事務。在服務可以被發現以前,必須首先在藍牙服務設備上註冊或廣播該服務。服務設備負責完成很多任務,包括創建描述所提供的服務的服務記錄,接受來自客戶端的連線,向服務設備的服務發現資料庫(SDDB)添加新的服務記錄。總之,它的工作類似於web伺服器。列表D是服務註冊的一個例子。

通訊

兩台設備必須共享通用的通訊協定才能通訊。為了套用能夠訪問更多的藍牙服務,藍牙javaAPI提供了這樣一個機制,它允許連線到使用RFCOMM,L2CAP,或OBEX協定的任何服務。如果服務使用了位於上面協定之上其它的協定(例如TCP/IP),只有在套用中利用CLDC通用連線框架實現額外的協定,才可以訪問該服務。

用於服務記錄的URL包括數字和符號,大體是這樣的結構:

btspp://508031205080110F1B1B1D1C100:8.它的意思是客戶應該使用藍牙串口框架來建立到地址為508031205080110F1B1B1D1C100的設備的8號服務。設備地址和計算機的物理地址相似,列表E顯示了簡單的RFCOMM連線。

程式列表

列表A:

importjavax.bluetooth.*;

importjavax.microedition.io.*;

importcom.atinav.bcc.*;

...

BCC.setPortName("COM1");

BCC.setBaudRate(57600);

BCC.setConnectable(true);

BCC.setDiscoverable(DiscoveryAgent.GIAC);

...

列表B:

...

//retrievethelocalBluetoothdeviceobject

LocalDevicelocal=LocalDevice.getLocalDevice();

//retrievethenameofthelocalBluetoothdevice

Stringname=local.getFriendlyName();

...

列表C:

...

LocalDevicelocaldevice=LocalDevice.getLocalDevice();

DiscoveryAgentdiscoveryAgent=localdevice.getDiscoveryAgent();

discoveryAgent.startInquiry(DiscoveryAgent.GIAC,this);

...

列表D:

...

//Serviceregistration

//invokeConnector.openwithaserverconnectionURLargument

StreamConnectionNotifierservice=(StreamConnectionNotifier)Connector.open("someURL");

//Obtaintheservicerecordcreatedbytheserverdevice

ServiceRecordsr=local.getRecord(service);

//Indicatethattheserviceisreadytoacceptaclientconnection.acceptAndOpen()blocks

//untilaclientconnects.

StreamConnectionconnection=(StreamConnection)service.acceptAndOpen();

//DOSOMEEXCHANGEHERE

service.close();

列表E

...

Stringurl=serviceRecord.getConnectionURL(record.NOAUTHENTICATE_NOENCRYPT,false);

//openaconnectiontotheserver

StreamConnectionconnection=(StreamConnection)Connector.open(url);

//Send/receivedata

try{

bytebuf[]=newbyte[200];

Stringmsg="Testmessage";

InputStreamis=connection.openInputStream();

OutputStreamos=connection.openOutputStream();

//senddatatotheserver

os.write(msg.getBytes);

//readdatafromtheserver

is.read(buf);

connection.close();

}catch(IOExceptione){

e.printStackTrace();

}

相關詞條

相關搜尋

熱門詞條

聯絡我們