王昭順,徐柏權
(1.北京科技大學計算機與通信工程學院,北京 100083;2.廊坊東方職業技術學院電子信息工程系,河北 廊坊 065001)
一種基于藍牙的交互式系統設計與實現*
王昭順1,徐柏權2
(1.北京科技大學計算機與通信工程學院,北京 100083;2.廊坊東方職業技術學院電子信息工程系,河北 廊坊 065001)
隨著無線互聯技術和移動終端技術的發展,手機等移動終端用戶對藍牙產品的功能提出了更高的要求。藍牙采用推送技術進行數據傳輸,用戶只能選擇是否接收,不能對藍牙發送端的數據進行自主交互瀏覽。采用J2ME和藍牙技術實現一種在移動藍牙終端上使用的交互式系統,有效地利用了J2ME 跨平臺的優勢,以及藍牙傳送數據易用性和實用性等優點。根據對JSR82規范提供的Java藍牙無線技術API的研究,給出了藍牙交互式系統的設計方案和系統結構。通過J2ME的無線應用開發包和MIDlet編程模型,實現了交互式系統。
藍牙技術;J2ME;交互式
藍牙(Bluetooth)是一種用于替代某些電子設備上使用電纜或連線的短距離無線連接技術,具有低功耗、低成本的特性[1]。隨著無線互聯技術和各種移動終端技術的發展,手機等移動終端用戶對于藍牙產品的功能提出了更高的要求。藍牙采用推送技術進行數據傳輸,用戶只能選擇是否接收,不能對藍牙發送端的數據進行自主交互瀏覽。
本文參照目前的藍牙技術以及J2ME平臺,開發一個基于J2ME的藍牙交互式系統,提出了采用J2ME和藍牙技術,實現一種在移動藍牙終端上使用的交互式系統,用戶到達一個藍牙信號覆蓋區域時會接收到藍牙發送設備發送到手機上的J2ME應用程序,用戶手機安裝上系統后可以自主交互地瀏覽藍牙發送終端的內容。同時,可以有效地利用J2ME 跨平臺的優勢,以及藍牙傳送數據易用性和實用性等優點。
2.1 藍牙技術
藍牙是一種支持設備短距離通信(一般10 m內)的無線電技術,能在包括移動電話、PDA、無線耳機、筆記本電腦、相關外設等眾多設備之間進行無線信息交換[1]。
藍牙技術由一組稱為協議棧的技術協議規定,規范的目標是允許遵循規范的應用能夠進行相互間操作。為了實現互操作,在遠程設備上的對應應用程序必須以同一協議棧運行。不同應用可運行于不同協議棧。每一協議棧都使用同一公共藍牙數據鏈路和物理層。圖 1所示為藍牙的協議結構(協議不包含最低的射頻層)。

Figure 1 Architecture of Bluetooth protocol圖1 藍牙協議結構
藍牙2.0 使用EDR技術增加了帶寬,提高設備同時處理多項任務或同時連接多個藍牙設備的能力,大大提高了藍牙技術的數據傳輸速率。藍牙3.0的核心是AMP(Generic Alternate MAC/PHY)交替射頻技術,允許藍牙協議棧針對任一任務動態地選擇正確射頻。通過集成802.11 PAL協議適應層,藍牙在需要的時候調用802.11 WI-FI用于實現高速數據傳輸,可以用于錄像機至高清電視、PC至PMP、UMPC至打印機之間的資料傳輸。同時,引入了增強電源控制(EPC)機制,降低實際空閑功耗。藍牙4.0技術包含三個子規范:傳統藍牙技術、高速藍牙和新的藍牙低功耗技術。這三個規范可以組合或者單獨使用。
2.2 JSR82(JABWT)規范
JSR82規范揭示了藍牙軟件棧給Java平臺的開發者。規范中定義了如下兩個包[2]:
(1)javax.bluetooth;
(2)javax.obex。
上面兩個包各自是獨立的,它們彼此并不依賴對方。上述兩個包都需要使用通用連接框架,因此它們都和javax.microedition.io有關聯,如圖2所示。

Figure 2 Package structure of JABWT圖2 JABWT的包結構
2.3 藍牙連接應用模型
開發基于藍牙通信的應用程序通常采用客戶端和服務器的應用程序模型。服務(Service)是通信的核心所在,這個服務向客戶端提供了某種功能性的服務[3]。開發者一旦創建了一個服務之后首先需要把這個服務注冊到服務查找數據庫SDDB(Service Discovery Data Base)中,然后等待客戶端連接。
客戶端首先必須通過服務發現協議SDP(Service Discovery Protocol)查找到服務所在的設備,然后在設備上查詢服務。一旦獲得了服務,也就獲得了連接服務器的URL。借助通用連接框架的方法即可獲得相關的Connection實例,客戶端就可以真正地使用服務器提供的服務了。
一個典型的藍牙功能的應用可以作為一個服務端或是一個客戶端,一個服務的提供者或是消費者,或者同時表現出服務和客戶的行為。圖3是一個典型的藍牙規范用例。

Figure 3 A typical use case with Bluetooth function圖3 一個典型的具有藍牙功能的用例
3.1 系統結構
交互式藍牙媒體系統的總體架構如圖4所示。軟件結構包含六部分:BTSDK、系統管理模塊、藍牙設備模塊、數據傳輸模塊、記錄管理模塊和界面模塊。

Figure 4 Overall architecture of interactive Bluetooth system圖4 交互式藍牙系統的總體架構
(1)BTSDK將藍牙模塊提交上來的數據進行封裝,通過回調函數的方式與外界交互。
(2)系統管理模塊將部分函數以回調函數的方式注冊給BTSDK,回調時即進行相關處理并反饋給用戶界面,同時將BTSDK的接口進行進一步封裝,供外部模塊使用。
(3)藍牙設備模塊封裝了所有的藍牙設備處理模型,包含藍牙設備和藍牙服務的搜索發現、設備管理,以及部分用于藍牙連接的函數信息。
(4)數據傳輸模塊可以分為兩個部分:數據上傳和數據下載。
(5)記錄管理模塊用來保存所有已經搜索到的藍牙設備,以便用戶再次進行數據傳輸。
(6)界面模塊設計與傳送文件相關的用戶界面,包含初始界面、搜索界面、文件界面、下載界面等。
3.2 藍牙設備管理
本系統通過JSR82 來實現與移動藍牙終端的通信,藍牙設備模塊包含所有與藍牙設備及其操作相關的模型,包括查找設備與服務、設備管理、設備通信三部分。
3.2.1 查找設備與服務
設備和服務的查找是由JABWT中的DiscoveryAgent類和DiscoveryListener[4]類完成的。在設備和服務查找過程中,回調機制被使用。無論是DiscoveryAgent查找設備還是查找服務的方法,最后一個參數都是DiscoveryListener,一旦服務或者設備被查找到,DiscoveryListener的相關方法就會被調用。
3.2.2 設備管理
JSR82 規范介紹了用于設備管理的三個類:LocalDevice、RemoteDevice和DeviceClass[4]。LocalDevice獲得本地藍牙設備的靜態信息。它依靠javax.bluetooth.DeviceClass 類來獲得設備類型和它所提供的服務類型。RemoteDevice 獲得藍牙鄰近區的設備信息。獲得RemoteDevice 對象后就可以調用getBluetoothAddress()和getFriendlyName()方法獲得遠程設備的地址和好友名稱。
3.2.3 設備通信
兩臺設備必須共享通用的通信協議才能通信。為了使應用能夠訪問更多的藍牙服務,藍牙Java API 提供了一個機制,它允許連接到使用RFCOMM、L2CAP或OBEX協議的任何服務[5]。
通過以上步驟實現了移動藍牙終端與藍牙發送器連接以及數據的上傳和下載過程。
3.3 狀態機描述系統
交互式藍牙媒體系統的系統管理模塊應用有限狀態機實現系統狀態的標識與轉變。藍牙交互式系統應用層狀態轉換如圖5所示。

Figure 5 Bluetooth interactive system application layer state conversion diagram圖5 藍牙交互式系統應用層狀態轉換圖
在系統中State類和UIFsm類是實現有限狀態機的基類,狀態改變過程通過Action類對象反饋調用Transition類對象進行狀態過渡。狀態過渡用到的幾個主要函數如下:
(1)addTransition(Stringe, States):添加定義的過渡狀態到當前系統狀態;
(2)addAction(intw, Stringn, Stringe, intf):添加當前狀態的事件操作;
(3)doAction(intfun, Fsmfsm):狀態轉變方法,實現對應狀態的過渡。
系統通過創建的Model接口和UIFsm類中的addModel()方法將State與模型類進行匹配。系統各模型的狀態與狀態機的狀態相對應,并通過以下函數進行模型轉換:
(1)addModel(Stringstate, Modelmodel):添加模型到當前狀態;
(2)getCurrentModel():獲取Model的名字;
(3)getModel(Stringstate):獲得模型對象實例;
(4)outEvent(Stringe): UIFsm狀態轉換事件處理方法,控制系統中的狀態改變;
(5)incoming(Stringe, Fsmf):State內部狀態轉換處理方法;
(6)outgoing(Stringe, Fsmf):State內部狀態轉換處理方法。
3.4 用戶界面以及操作的實現
系統的每個界面都繼承javax.microedition.lcdui包中提供的API,主要由Display和Displayable組成。
用戶界面與交互操作實現如圖6所示。

Figure 6 User interface and interactive operation implementation structure diagram圖6 用戶界面與交互操作實現結構圖
程序中首先定義了一個BaseScreen抽象類,類中通過makeActive()方法把Display的setCurrent()方法進行封裝并提供給所有繼承子類。Display通過setCurrent()方法切換當前屏幕。程序中絕大部分對Item的操作是繼承自TabItem實現的,TabItem選用CustomItem組件作為父類,它與Canvas的事件傳輸進行交互操作,能夠獲得屏幕上顯示的Item對象,然后通過調用TabItem的各種Form對象進行交互。在TabItem類中要實現的是與設備相關的各種操作,如手機鍵盤按鍵的各種移動、按下和釋放操作的響應。
3.5 程序運行機制與事件處理方法
程序運行與事件處理流程如圖7所示。

Figure 7 Running of the program and event processing flow chart圖7 程序運行與事件處理流程圖
程序由MIDlet的狀態函數進入系統,首先進行初始化并進入默認的設備界面,用戶菜單包括Browser、Discover和Download命令,當用戶通過按鍵選擇相關命令后會觸發當前屏幕的Form對象中對相關命令的處理函數。
在事件處理中,Command類是對一個動作語義的封裝,而動作的具體行為必須在CommandListener中的commandAction()方法中實現。Form對象全部繼承自BaseScreen類,BaseScreen類實現了CommandListener, CommandListener是MIDlet程序在屏幕導航中廣泛使用的接口,Displayable對象通過addCommand()方法添加Command實例來接受高級事件,添加之后利用commandAction()方法進行事件處理。
3.6 與實際產品的互操作測試結果
藍牙SIG 定義了一些測試用例,但它們的測試路徑覆蓋率不夠高,為此我們經過仔細分析軟件執行路徑和profiles 自身的關鍵特征,新增了異常情況和特殊情況下的測試用例,以盡可能地提高測試充分性。
表1為根據藍牙互操作規范定義的部分測試用例,每個用例提供了一個使用場景和期望的結果。

Table 1 Part of test cases表1 部分測試用例設計
圖8所示為程序部分功能屏幕截圖。

Figure 8 Part of the program screenshot圖8 程序屏幕截圖
測試結果發現,對于Nokia、Sony Erricson 與Motorola 等品牌的手機,交互式藍牙系統都能夠正常安裝。安裝成功后手機系統在程序初始化后都能正常進入默認界面,并順利通過測試用例的測試。測試中由于不同手機的導航鍵屬性值不同,導致部分手機系統中不能通過導航鍵跳轉界面,這屬于程序考慮范圍內,程序通過手機數字按鍵實現了導航鍵的跳轉功能,測試結果與預期結果相同。
3.7 與傳統藍牙產品的技術比較
大多數藍牙技術采用推送技術進行數據傳輸,用戶只能單向地選擇是否接收發送端發送過來的數據,但是并不能對發送端的數據內容進行自主交互瀏覽。
交互式藍牙系統使用戶與藍牙發送器之間產生互動,能使用戶任意地選擇所需的內容,大大地增強了整個藍牙網絡系統的交互性與適用性。
本文針對藍牙用戶不能對藍牙發送內容進行選擇接收這一缺陷,采用J2ME和藍牙技術開發了一個基于J2ME的藍牙交互式系統。
藍牙交互式系統突破了傳統手機藍牙及藍牙發射器的局限性,使用戶手機與藍牙發送器產生自主的互動效應,用戶可自主地選擇所需瀏覽的節目內容和使用服務娛樂功能,使各類型場所均可形成一個區域性網絡。藍牙手機用戶真正能夠得到他們喜歡和需要的功能與服務,其應用范圍將十分廣泛。
[1] McDermott-Wells P. What is Bluetooth [J]. IEEE Potentials,2004,23 (5):33-35.
[2] Wang Li-ming,Yin Bo,Bie Zai-ping. Implementation of LBS system based on J2ME and Bluetooth GPS[J]. Microcomputer Information,2009,25(2-3):5-7.(in Chinese)
[3] Zhou Zhen,Guo Qing-ping. Development and implementation of Bluetooth based on J2ME [J].Computer Knowledge and Technology(Academic Exchange),2007(13):93-94.(in Chinese)
[4] Haartsen J,Naghshineh M,Inouye J,et al.Bluetooth:Vision,goals,and architecture[J]. Mobile Computing and Communications Review, 1998, 2(11):65-69.
[5] Ma Yi-hua, Feng En-xin. Applications and implementation of J2ME Bluetooth technology based on JSR-82 specification[J].Radio Engineering,2004,34(8):48-50.(in Chinese)
附中文參考文獻:
[2] 王立明,殷波,別再平.基于J2ME和藍牙GPS的LBS系統設計[J]. 微計算機信息,2009,25(2-3):5-7.
[3] 周臻,郭慶平.基于J2ME的藍牙應用開發及實現[J].電腦知識與技術(學術交流),2007(13):93-94.
[5] 馬毅華,馮恩信.基于JSR-82規范的J2ME藍牙應用及其實現[J].無線電工程,2004,34(8):48-50.
WANGZhao-shun,born in 1969,PhD,professor,CCF member(E200006628S),his research interest includes software engineering.
DesignandimplementationofaninteractivesystembasedonBluetooth
WANG Zhao-shun1,XU Bai-quan2
(1.School of Computer and Communication Engineering,University of Science and Technology Beijing,Beijing 100083;2.Department of Information Engineering,Langfang Oriental Institute of Technology,Langfang 065001,China)
With the development of the wireless connectivity technology and the mobile terminal technologies, mobile terminal users such as mobile phone users ask Bluetooth products for higher requirements. Bluetooth uses the push technology to transfer data, and users only have authority to choose whether to receive the data but cannot browse the data from the Bluetooth transmitter independently and interactively. An interactive system based on the J2ME and Bluetooth technologies is introduced. It utilizes the advantage of cross-platform of J2ME as well as the advantages of easy of use and practicability of Bluetooth technology to transfer data. Based on the JSR82 Java Bluetooth wireless technology API provided in the specification, the design scheme and system structure of the proposed Bluetooth interactive system is given. Based on the J2ME wireless application development kit and the MIDlet programming model, the interactive system is implemented.
Bluetooth protocol;J2ME;interactive
1007-130X(2014)08-1500-05
2013-06-28;
:2013-11-15
TP391.9
:A
10.3969/j.issn.1007-130X.2014.08.013

王昭順(1969-),男,江西南豐人,博士,教授,CCF會員(E200006628S),研究方向為軟件工程。E-mail:zhswang@sohu.com
通信地址:065001 河北省廊坊市廊坊東方職業技術學院信息工程系 徐柏權
Address:Department of Information Engineering,Langfang Oriental Institute of Technology,Langfang 065001,Hebei,P.R.China