藍(lán)牙是一種低成本、短距離的無(wú)線通信技術(shù)。對(duì)于那些希望創(chuàng)建個(gè)人局域網(wǎng)(PANs)的人們來(lái)說(shuō),藍(lán)牙技術(shù)已經(jīng)越來(lái)越流行了。每個(gè)個(gè)人局域網(wǎng)都在獨(dú)立設(shè)備的周圍被動(dòng)態(tài)地創(chuàng)建,并且為蜂窩式電話和PDA等設(shè)備提供了自動(dòng)連接和即時(shí)共享數(shù)據(jù)的能力。
為了在Java平臺(tái)上開(kāi)發(fā)支持藍(lán)牙技術(shù)的軟件,JCP定義了JSR82標(biāo)準(zhǔn)--Java藍(lán)牙無(wú)線技術(shù)APIs(JABWT)。
在這篇文章中,我將介紹一些關(guān)于藍(lán)牙技術(shù)的背景,概述一下支持藍(lán)牙技術(shù)的MIDlet應(yīng)用程序的典型要素,然后介紹給你核心的Java藍(lán)牙APIs。最后我們展示一些代碼來(lái)演示如何使用這些APIs。
實(shí)際上JSR82定義了兩個(gè)獨(dú)立的可選包:核心藍(lán)牙API和對(duì)象交換(OBEX)API。這篇文章將對(duì)這兩個(gè)中更為普遍的部分--核心藍(lán)牙包javax.bluetooth進(jìn)行詳細(xì)地闡述,而OBEX API(對(duì)象交換),我們留到以后去討論。
藍(lán)牙無(wú)線電技術(shù)基于在工業(yè)、科學(xué)以及醫(yī)學(xué)(ISM)上公用的2.45GHz開(kāi)放頻段,這一頻段無(wú)需授權(quán)并全球通用。當(dāng)藍(lán)牙設(shè)備互相連接時(shí),他們將組成一個(gè)微微網(wǎng)(piconet),即以一個(gè)主設(shè)備和7個(gè)從設(shè)備的形式動(dòng)態(tài)創(chuàng)建網(wǎng)絡(luò)。藍(lán)牙也支持piconet網(wǎng)之間的連接:當(dāng)一個(gè)piconet中的主設(shè)備成為另一個(gè)piconet的從設(shè)備時(shí),piconet與piconet間將形成橋接。
藍(lán)牙協(xié)議棧提供了一組的高層協(xié)議和API以完成發(fā)現(xiàn)服務(wù)和模擬串行I/O,還有一個(gè)關(guān)于包分割和重組的低層協(xié)議以及多路技術(shù)協(xié)議和質(zhì)量服務(wù)。藍(lán)牙互操作性profiles--不要與J2ME profiles搞混--它是用來(lái)描述跨平臺(tái)互操作性和一致性需求的。
藍(lán)牙互操作性profiles包括三方面內(nèi)容:通用訪問(wèn)profile(GAP)定義了設(shè)備管理功能性;服務(wù)發(fā)現(xiàn)應(yīng)用profiles定義了服務(wù)發(fā)現(xiàn)方面的內(nèi)容,串口profiles定義了互操作設(shè)備和模擬串口電纜的能力。你可以通過(guò)藍(lán)牙規(guī)范(Bluetooth specification)學(xué)習(xí)這些和其它的profiles。藍(lán)牙棧包含一個(gè)軟件棧來(lái)映射一個(gè)固件棧(firmware),由圖1所示:
JSR82揭示了藍(lán)牙軟件棧給Java平臺(tái)的開(kāi)發(fā)者。其中引起我們興趣的是服務(wù)發(fā)現(xiàn)協(xié)議(SDP),用來(lái)模擬串口的串口profile RFCOMM,向上層協(xié)議提供諸如分割和重組等導(dǎo)向性連接的數(shù)據(jù)轉(zhuǎn)換操作的邏輯鏈路控制及適配profile(L2CAP),以及多路技術(shù)協(xié)議。注意JABWT不支持無(wú)連接L2CAP。
JABWT也包括對(duì)象交換API。OBEX也是高層API,它用來(lái)交換對(duì)象數(shù)據(jù),諸如電子商業(yè)卡和日歷標(biāo)簽之間以vCard和vCalendar的格式進(jìn)行數(shù)據(jù)傳輸。在藍(lán)牙上,對(duì)象交換通過(guò)RFCOMM發(fā)生。OBEX在最開(kāi)始時(shí)是由紅外(IrDA)引入的,并且它可以在IrDA協(xié)議、TCP/IP或者是其他協(xié)議的頂層實(shí)現(xiàn)。
為了在Java平臺(tái)上開(kāi)發(fā)支持藍(lán)牙技術(shù)的軟件,JCP定義了JSR82標(biāo)準(zhǔn)--Java藍(lán)牙無(wú)線技術(shù)APIs(JABWT)。
在這篇文章中,我將介紹一些關(guān)于藍(lán)牙技術(shù)的背景,概述一下支持藍(lán)牙技術(shù)的MIDlet應(yīng)用程序的典型要素,然后介紹給你核心的Java藍(lán)牙APIs。最后我們展示一些代碼來(lái)演示如何使用這些APIs。
實(shí)際上JSR82定義了兩個(gè)獨(dú)立的可選包:核心藍(lán)牙API和對(duì)象交換(OBEX)API。這篇文章將對(duì)這兩個(gè)中更為普遍的部分--核心藍(lán)牙包javax.bluetooth進(jìn)行詳細(xì)地闡述,而OBEX API(對(duì)象交換),我們留到以后去討論。
藍(lán)牙無(wú)線電技術(shù)基于在工業(yè)、科學(xué)以及醫(yī)學(xué)(ISM)上公用的2.45GHz開(kāi)放頻段,這一頻段無(wú)需授權(quán)并全球通用。當(dāng)藍(lán)牙設(shè)備互相連接時(shí),他們將組成一個(gè)微微網(wǎng)(piconet),即以一個(gè)主設(shè)備和7個(gè)從設(shè)備的形式動(dòng)態(tài)創(chuàng)建網(wǎng)絡(luò)。藍(lán)牙也支持piconet網(wǎng)之間的連接:當(dāng)一個(gè)piconet中的主設(shè)備成為另一個(gè)piconet的從設(shè)備時(shí),piconet與piconet間將形成橋接。
藍(lán)牙協(xié)議棧提供了一組的高層協(xié)議和API以完成發(fā)現(xiàn)服務(wù)和模擬串行I/O,還有一個(gè)關(guān)于包分割和重組的低層協(xié)議以及多路技術(shù)協(xié)議和質(zhì)量服務(wù)。藍(lán)牙互操作性profiles--不要與J2ME profiles搞混--它是用來(lái)描述跨平臺(tái)互操作性和一致性需求的。
藍(lán)牙互操作性profiles包括三方面內(nèi)容:通用訪問(wèn)profile(GAP)定義了設(shè)備管理功能性;服務(wù)發(fā)現(xiàn)應(yīng)用profiles定義了服務(wù)發(fā)現(xiàn)方面的內(nèi)容,串口profiles定義了互操作設(shè)備和模擬串口電纜的能力。你可以通過(guò)藍(lán)牙規(guī)范(Bluetooth specification)學(xué)習(xí)這些和其它的profiles。藍(lán)牙棧包含一個(gè)軟件棧來(lái)映射一個(gè)固件棧(firmware),由圖1所示:
JSR82揭示了藍(lán)牙軟件棧給Java平臺(tái)的開(kāi)發(fā)者。其中引起我們興趣的是服務(wù)發(fā)現(xiàn)協(xié)議(SDP),用來(lái)模擬串口的串口profile RFCOMM,向上層協(xié)議提供諸如分割和重組等導(dǎo)向性連接的數(shù)據(jù)轉(zhuǎn)換操作的邏輯鏈路控制及適配profile(L2CAP),以及多路技術(shù)協(xié)議。注意JABWT不支持無(wú)連接L2CAP。
JABWT也包括對(duì)象交換API。OBEX也是高層API,它用來(lái)交換對(duì)象數(shù)據(jù),諸如電子商業(yè)卡和日歷標(biāo)簽之間以vCard和vCalendar的格式進(jìn)行數(shù)據(jù)傳輸。在藍(lán)牙上,對(duì)象交換通過(guò)RFCOMM發(fā)生。OBEX在最開(kāi)始時(shí)是由紅外(IrDA)引入的,并且它可以在IrDA協(xié)議、TCP/IP或者是其他協(xié)議的頂層實(shí)現(xiàn)。