參考圖 2 藍(lán)牙聊天系統(tǒng)客戶端架構(gòu):
① 在 BtClient 里,有一個(gè)listView 和一個(gè)輸入框,分別用來顯示接收到的服務(wù)器端發(fā)送的消息和輸入文本消息向服務(wù)器端發(fā)送。這是程序的界面構(gòu)成。
② 啟動(dòng)程序后,客戶端進(jìn)行初始化操作,包括構(gòu)造 OnMessageReceivedListener、OnConnectionServiceReadyListener;啟動(dòng)ConnectionService.
?、?準(zhǔn)備工作完畢后,回調(diào)OnConnectionServiceReadyListener,啟動(dòng)ServerListActivity 界面,顯示搜索到的藍(lán)牙設(shè)備, 點(diǎn)擊服務(wù)器端所在設(shè)備地址,通過Connection 調(diào)用ConnectionService 的connect()函數(shù),來向服務(wù)器發(fā)起連接請(qǐng)求。
?、?等服務(wù)器接受連接請(qǐng)求后,返回BluetoothSocket,把服務(wù)器端地址address 和這個(gè)BluetoothSocket 放到HashMap 里,用來管理socket.接著啟動(dòng)BtStreamWatcher 線程,用來監(jiān)聽這個(gè)socket 里的輸入輸出流,把此線程也放到另外一個(gè)HashMap 里。
?、?BtStreamWatcher 用來處理輸入輸出流。在BTClient 界面上進(jìn)行輸入的時(shí)候,根據(jù)服務(wù)器地址,從HashMap 里取出對(duì)應(yīng)的socket,由它來向此服務(wù)器發(fā)送消息。接收到文本消息時(shí),回調(diào)OnMessageReceivedListener 來通知上層,在界面上顯示。
?、?啟動(dòng)第二個(gè)客戶端,進(jìn)行同樣操作。
這樣,本系統(tǒng)就完成了基于藍(lán)牙的一對(duì)二多人聊天。
6 聊天系統(tǒng)效果圖
軟件完成后的效果圖如下所示:
服務(wù)器手機(jī)型號(hào):HTC G12.
客戶端手機(jī)型號(hào):右設(shè)備:天語W606;左設(shè)備:HTC G13.
服務(wù)器端:
藍(lán)牙一對(duì)多聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)3.jpg)
?
圖3 藍(lán)牙聊天系統(tǒng)服務(wù)器界面
客戶端:
藍(lán)牙一對(duì)多聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)4.jpg)
?
圖4 藍(lán)牙聊天系統(tǒng)客戶端界面
7 后續(xù)計(jì)劃
藍(lán)牙最多支持一對(duì)七的通信,但由于藍(lán)牙開發(fā)必須在真機(jī)上進(jìn)行,受到設(shè)備限制,本系統(tǒng)只實(shí)現(xiàn)了一對(duì)二的聊天,但很容易擴(kuò)展到一對(duì)三、一對(duì)更多。在此基礎(chǔ)上,通過服務(wù)器把收到的客戶端信息轉(zhuǎn)發(fā)給所有其他的客戶端,能夠?qū)崿F(xiàn)群組通信。本系統(tǒng)目前也只是實(shí)現(xiàn)了文本消息的傳輸,后續(xù)計(jì)劃準(zhǔn)備實(shí)現(xiàn)圖片、語音、視頻等多媒體文件的一對(duì)多藍(lán)牙傳輸。
8 結(jié)論
本文以MVC模式架構(gòu)設(shè)計(jì)了藍(lán)牙通信的服務(wù)器端和客戶端,并對(duì)各層作了簡(jiǎn)要介紹,詳細(xì)實(shí)現(xiàn)了服務(wù)器端和客戶端的模塊,給出了運(yùn)行效果圖,最后對(duì)本系統(tǒng)的后續(xù)計(jì)劃進(jìn)行了說明。
評(píng)論