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