引言
Android 一詞的英文本義是"機(jī)器人",它是Google 公司于2007 年11 月宣布的基于Linux 平臺的開源手機(jī)操作系統(tǒng),它是一套真正意義上的開放性的移動設(shè)備綜合平臺,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成[1].Android 最大的特點(diǎn)在于其開放性,它宣布開放源代碼,手機(jī)制造商、手機(jī)芯片廠商、移動運(yùn)營商以及開發(fā)者都可以對源碼進(jìn)行學(xué)習(xí)和修改并進(jìn)行開發(fā)。藍(lán)牙是智能手機(jī)的一項重要功能,它也被整合到了Android 平臺上,作為Android 的一個移動網(wǎng)絡(luò)通信模塊。Android 系統(tǒng)提供了藍(lán)牙開發(fā)的API,供開發(fā)者調(diào)用。
本文實現(xiàn)了基于Android 平臺通過藍(lán)牙進(jìn)行通信的一對多聊天系統(tǒng)。選擇藍(lán)牙作為通信手段是由于藍(lán)牙連接簡單,避免了網(wǎng)絡(luò)連接對于網(wǎng)絡(luò)及信號強(qiáng)度的依賴性。Android手機(jī)使用藍(lán)牙模塊分別作為客戶端和服務(wù)器端,實現(xiàn)好友或陌生人間即時的一對多聊天系統(tǒng)。
1 Android 應(yīng)用程序組成
一般來說,Android 應(yīng)用程序主要由下列四部分組成,分別是:
Activity(活動對象)、BroadcaST Receiver(廣播接收器)、Service(服務(wù))、CONtent Provider(內(nèi)容提供者)。然而,并不是所有的程序都需要全部部分,可以由上面的一個或幾個來組建。使用某些組件構(gòu)建Android 應(yīng)用程序時,需要在AndroidManifest.xml 文件里進(jìn)行聲明。
Activity
在Android 應(yīng)用程序中,Activity 一般代表手機(jī)的一屏,即用戶可見的一個界面。Android應(yīng)用程序的運(yùn)行過程就是在不同的Activity 之間切換的過程。每個Activity 都有自己的視圖和事件對應(yīng)。大多數(shù)應(yīng)用程序都有多個Activity.
Broadcast Receiver
Broadcast Receiver 是一個接受廣播消息并響應(yīng)的組件。廣播消息可以由系統(tǒng)產(chǎn)生,例如時區(qū)發(fā)生變化,電池電量發(fā)生變化等。同時也可以由其他應(yīng)用程序產(chǎn)生,對于這兩種廣播,在Broadcast receiver 里都可以設(shè)置相應(yīng)的過濾規(guī)則來進(jìn)行接收。
Service
Service 是具有長生命周期并且沒有用戶界面的代碼。通過startService(Intent service)可以來啟動一個Service,通過Context.bindService()可以綁定一個Service.當(dāng)已經(jīng)連接上了一個服務(wù),就可以使用服務(wù)提供的外部接口來和服務(wù)通訊了。
Content Provider
Content Provider 就是一個類,作為應(yīng)用程序之間唯一的共享數(shù)據(jù)的途徑,它實現(xiàn)了一個標(biāo)準(zhǔn)的方法集合,其他應(yīng)用程序可以使用這些方法在應(yīng)用程序之間共享數(shù)據(jù)。
本文系統(tǒng)主要用到了Activity 和Service.
2 藍(lán)牙
藍(lán)牙這個名稱來自于第十世紀(jì)的一位丹麥國王 Harald Blatand , Blatand在英文里的意思可以被解釋為Bluetooth(藍(lán)牙)。現(xiàn)取其"統(tǒng)一"的含義,用來命名意在統(tǒng)一無線局域網(wǎng)通訊標(biāo)準(zhǔn)的藍(lán)牙技術(shù)。它是一種支持設(shè)備短距離通信(一般10m 內(nèi))的無線電技術(shù)。能在包括移動電話、PDA、無線耳機(jī)、筆記本電腦、相關(guān)外設(shè)等眾多設(shè)備之間進(jìn)行無線信息交換。利用藍(lán)牙技術(shù),能夠有效地簡化移動通信終端設(shè)備之間的通信,也能夠成功地簡化設(shè)備與Internet之間的通信,從而使數(shù)據(jù)傳輸變得更加迅速高效,為無線通信拓寬道路。藍(lán)牙采用分散式網(wǎng)絡(luò)結(jié)構(gòu)以及快跳頻和短包技術(shù),支持點(diǎn)對點(diǎn)及點(diǎn)對多點(diǎn)通信,工作在全球通用的2.4GHz ISM(即工業(yè)、科學(xué)、醫(yī)學(xué))頻段,其數(shù)據(jù)速率為1Mbps,采用時分雙工傳輸方案實現(xiàn)全雙工傳輸。
3 Android 上藍(lán)牙模塊
Android 平臺支持藍(lán)牙協(xié)議棧,允許一臺設(shè)備與另外的藍(lán)牙設(shè)備無線交換數(shù)據(jù)。Android提供了相關(guān)的藍(lán)牙API來支持藍(lán)牙方面應(yīng)用的開發(fā)。
使用藍(lán)牙進(jìn)行通信有主要的四個步驟:
設(shè)置藍(lán)牙、搜索藍(lán)牙設(shè)備、連接設(shè)備、傳輸數(shù)據(jù)。
本文用到的主要類有:
BluetoothAdapter:表示本地的藍(lán)牙適配器。BluetoothAdapter是所有藍(lán)牙操作的入口點(diǎn)。
用它可以搜索其他的藍(lán)牙設(shè)備、查詢已配對的設(shè)備、用已知的MAC地址來實例化一個藍(lán)牙設(shè)備(BluetoothDevice),建立一個BluetoothServerSocket來監(jiān)聽其他設(shè)備的連接請求。
BluetoothDevice:表示一個藍(lán)牙設(shè)備。用它來向服務(wù)器端設(shè)備發(fā)起連接請求(通過Bluetoothsocket),或者查詢設(shè)備信息,如名字、地址、配對狀態(tài)等。
BluetoothServerSocket :表示一個開啟的Server Socket 來監(jiān)聽連接請求(類似于TCPServerSocket)。為了連接兩個藍(lán)牙設(shè)備,其中一臺設(shè)備必須用這個類創(chuàng)建Server Socket.
當(dāng)遠(yuǎn)端設(shè)備向這個設(shè)備發(fā)出了連接請求,BluetoothServerSocket接收請求后會返回一個已連接的BluetoothSocketBluetoothSocket:表示藍(lán)牙套接字(類似于TCP socket),它是應(yīng)用程序與其他藍(lán)牙設(shè)備通過輸入輸出流交換數(shù)據(jù)的連接點(diǎn)。
要在 Android應(yīng)用程序中使用藍(lán)牙特性,必須聲明兩個藍(lán)牙權(quán)限:

?
4 聊天系統(tǒng)設(shè)計
藍(lán)牙通信,類似于TCP通信,都需要有服務(wù)器端和客戶端。在本聊天系統(tǒng)中,一部Android手機(jī)作為藍(lán)牙服務(wù)器端,另外兩臺Android手機(jī)作為藍(lán)牙客戶端。客戶端分別連到服務(wù)器,給服務(wù)器發(fā)送并接收文本消息;服務(wù)器也能夠給客戶端發(fā)送并接收文本消息。
前面已經(jīng)提到,本系統(tǒng)主要用到的Android 系統(tǒng)組件為Activity 和Service.在Android的設(shè)計中,每個Activity 都是一個獨(dú)立的進(jìn)程,每個Service 也是一個獨(dú)立的進(jìn)程,而Activity要與Service 進(jìn)行通信,就是跨進(jìn)程的通信,這時就需要使用Binder 機(jī)制了[4].Android 對Binder 機(jī)制進(jìn)行了抽象,定義了IBinder 接口。在上層,其具體實現(xiàn)是由AIDL(AndroidInterface Definition Language,即Android 接口描述語言)來完成的。
本文在藍(lán)牙通信服務(wù)器端和客戶端都使用了MVC 模式,采用分層的結(jié)構(gòu),具體分為表示層、控制層、業(yè)務(wù)和數(shù)據(jù)交換層,對應(yīng)MVC 設(shè)計模式中的View、Controller 和Model[5].
評論