高凱
(陜西理工學(xué)院 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,陜西 漢中 723001)
Google公司出品的android操作系統(tǒng)是目前世界范圍內(nèi)占有率最高的智能手機(jī)操作系統(tǒng),這個(gè)系統(tǒng)依托于Google公司強(qiáng)大的互聯(lián)網(wǎng)服務(wù)有著很好的發(fā)展前景。目前的手機(jī)短信功能相對(duì)比較簡(jiǎn)單,基本上以發(fā)送文本信息為主,雖然也可以發(fā)送彩信,但是彩信的大小有限制,而且費(fèi)用也相對(duì)比較高。目前手機(jī)上的聊天軟件主要有中國(guó)移動(dòng)的飛信、騰訊QQ和騰訊微信,這些聊天軟件應(yīng)用普遍,非常受人們的歡迎。這些軟件依托智能手機(jī)上搭載的3G卡網(wǎng)絡(luò)實(shí)現(xiàn)通信,同時(shí)也可以使用wifi上傳輸網(wǎng)絡(luò)數(shù)據(jù)。
目前使用3G網(wǎng)絡(luò)的用戶(hù)越來(lái)越多,利用3G網(wǎng)絡(luò)傳輸速度快的特點(diǎn)可以在手機(jī)上開(kāi)發(fā)一個(gè)軟件,利用網(wǎng)絡(luò)來(lái)發(fā)送多媒體信息,這樣不僅可以即時(shí)通信,而且還可以省去相當(dāng)一部分費(fèi)用[1]。
為了開(kāi)發(fā)出真正滿(mǎn)足用戶(hù)需求的軟件產(chǎn)品,首先必須知道用戶(hù)的需求,對(duì)軟件需求的深入理解是軟件開(kāi)發(fā)工作獲得成功的前提條件。
作為一款聊天通信軟件,用戶(hù)可能會(huì)有很多好友,好友管理是用戶(hù)常用的功能,聊天用戶(hù)可以對(duì)自己的好友進(jìn)行管理,包括查找好友、添加好友、刪除好友,修改好友在本地的顯示信息。
發(fā)送聊天信息是該軟件的核心功能,用戶(hù)可以發(fā)送多媒體信息,包括文字、圖片、動(dòng)畫(huà)、音頻、視頻。用戶(hù)發(fā)送文字消息具有即時(shí)性,如果用戶(hù)在線(xiàn)則可以立即收到好友發(fā)送的消息。用戶(hù)接收到的信息會(huì)存儲(chǔ)到數(shù)據(jù)庫(kù)中,當(dāng)同一用戶(hù)再次登錄后可以看到自己的聊天記錄。當(dāng)自己和好友聊天時(shí),如果其他的好友發(fā)送消息過(guò)來(lái)則給予聲音提示,并加入到最近聊天好友列表里[2-3]。
為了描繪信息流和數(shù)據(jù)從輸入移動(dòng)到輸出的過(guò)程中所經(jīng)受的變換,及數(shù)據(jù)在軟件中流動(dòng)和被處理的過(guò)程,特用以下數(shù)據(jù)流圖來(lái)形象的表示。首先從用戶(hù)出發(fā),用戶(hù)需要登錄,對(duì)于沒(méi)有注冊(cè)的用戶(hù)需要注冊(cè)后才能登錄本系統(tǒng),登錄后可以和好友進(jìn)行聊天,可以發(fā)送多媒體信息,如圖1所示,是整個(gè)軟件的系統(tǒng)設(shè)計(jì)流圖[4]。
圖1 數(shù)據(jù)流圖Fig.1 Data flow diagram
為了把用戶(hù)的數(shù)據(jù)要求清楚、準(zhǔn)確地描述出來(lái),建立一個(gè)概念性的數(shù)據(jù)模型,它描述了從用戶(hù)角度看到的數(shù)據(jù),反映了用戶(hù)的現(xiàn)實(shí)環(huán)境。本系統(tǒng)的實(shí)例聯(lián)系,是以手機(jī)用戶(hù)為中心,分為性別、狀態(tài)、賬號(hào)、密碼、昵稱(chēng)、Email和年齡。
根據(jù)上面的需求分析設(shè)計(jì)軟件的結(jié)構(gòu),也就是要確定系統(tǒng)中每個(gè)程序是由哪些模塊組成的,以及這些模塊相互間的關(guān)系。從較抽象的層次上分析對(duì)比多種可能的系統(tǒng)實(shí)現(xiàn)方案和軟件結(jié)構(gòu),從中選出最佳方案和最合理的軟件結(jié)構(gòu),用較低成本開(kāi)發(fā)出較高質(zhì)量的軟件系統(tǒng)。
根據(jù)需求分析把系統(tǒng)的整體架構(gòu)設(shè)計(jì)出來(lái),用一張圖形象直觀地展示出來(lái)。設(shè)計(jì)思想描述了系統(tǒng)的設(shè)計(jì)過(guò)程與思想[5]。
3.1.1 系統(tǒng)的體系結(jié)構(gòu)
系統(tǒng)的體系結(jié)構(gòu)從整體上描述了系統(tǒng)的架構(gòu),描述系統(tǒng)內(nèi)部的運(yùn)行流程。首先由客戶(hù)端發(fā)起請(qǐng)求,服務(wù)器在收到請(qǐng)求后根據(jù)請(qǐng)求類(lèi)型做相應(yīng)的業(yè)務(wù)邏輯處理,邏輯處理會(huì)與數(shù)據(jù)庫(kù)交互,業(yè)務(wù)邏輯處理完后返回?cái)?shù)據(jù)給客戶(hù)端,客戶(hù)端根據(jù)服務(wù)器的返回?cái)?shù)據(jù)的類(lèi)型做相應(yīng)的業(yè)務(wù)邏輯處理,往本地?cái)?shù)據(jù)庫(kù)保存數(shù)據(jù)或者從本地?cái)?shù)據(jù)庫(kù)查詢(xún)數(shù)據(jù),然后給用戶(hù)展示界面,整個(gè)系統(tǒng)的體系結(jié)構(gòu)如圖2所示。
3.1.2 系統(tǒng)的設(shè)計(jì)思想
本系統(tǒng)的核心是手機(jī)用戶(hù)之間通過(guò)本系統(tǒng)利用網(wǎng)絡(luò)發(fā)送多媒體消息,即時(shí)通信。本系統(tǒng)使用socket方式通信。服務(wù)器端一直監(jiān)聽(tīng)客戶(hù)端的連接,每當(dāng)有客戶(hù)端連接服務(wù)器時(shí),服務(wù)器新建一個(gè)線(xiàn)程來(lái)處理客戶(hù)端的請(qǐng)求操作。當(dāng)客戶(hù)端連接到服務(wù)器時(shí)將客戶(hù)端的socket保存到服務(wù)器中,以便讀取客戶(hù)端信息和給客戶(hù)端發(fā)送信息。當(dāng)客戶(hù)端給好友發(fā)送消息時(shí),首先傳送給服務(wù)器,服務(wù)器從保存的socket中找到對(duì)應(yīng)好友的socket,然后通過(guò)好友的socket給好友發(fā)送信息。信息的傳遞是以Json數(shù)據(jù)的形式在用戶(hù)之間傳輸,對(duì)于二進(jìn)制剛將二進(jìn)制文件用Base64將字節(jié)轉(zhuǎn)換為字符后再以Json的形式傳輸。
圖2 系統(tǒng)體系結(jié)構(gòu)圖Fig.2 System architecture diagram
根據(jù)系統(tǒng)的整體架構(gòu)把系統(tǒng)分為多個(gè)子模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊集成起來(lái)構(gòu)成一個(gè)整體。
3.2.1 系統(tǒng)總體功能模塊
根據(jù)系統(tǒng)的需求分析,將系統(tǒng)劃分為如下幾個(gè)模塊:
登錄模塊,注冊(cè)模塊,添加好友模塊,刪除好友模塊,查找好友模塊,發(fā)送文字信息模塊,發(fā)送二進(jìn)制文件模塊。
3.2.2 系統(tǒng)總體流程
用戶(hù)從開(kāi)始登錄到退出本系統(tǒng)的一個(gè)使用流程用圖3來(lái)展示。用戶(hù)在主界面與聊天界面停留時(shí)間最長(zhǎng),也是系統(tǒng)的核心功能所在。
對(duì)于首次使用本系統(tǒng)的用戶(hù)需要注冊(cè),用戶(hù)登錄后可以給好友展示不同的在線(xiàn)狀態(tài),包括:在線(xiàn)(默認(rèn)),離開(kāi),忙碌,隱身。登錄界面對(duì)應(yīng)的類(lèi)為:MainActivity.java。
圖3 系統(tǒng)流程圖Fig.3 The flow chart of the system
用戶(hù)點(diǎn)擊登錄按鈕時(shí)會(huì)調(diào)用SocketSingle對(duì)象,Socke tSingle類(lèi)使用了單例設(shè)計(jì)模式,在本系統(tǒng)中SocketSingle對(duì)象只有唯一的一個(gè),第一次調(diào)用SocketSingle對(duì)象時(shí)會(huì)與服務(wù)器連接,客戶(hù)端連接服務(wù)器代碼如下:
如果連接5秒還沒(méi)有連接成功則提示用戶(hù)連接超時(shí)。
服務(wù)器一直處于監(jiān)聽(tīng)狀態(tài),監(jiān)聽(tīng)客戶(hù)端的連接,一旦有客戶(hù)端連接并連接成功則保持長(zhǎng)久連接,并保存用戶(hù)登錄信息及用戶(hù)的Socket對(duì)象,直到用戶(hù)退出系統(tǒng)連接都會(huì)中斷。服務(wù)器監(jiān)聽(tīng)客戶(hù)端連接代碼如下:
與服務(wù)器連接成功后服務(wù)器會(huì)給客戶(hù)端分配一個(gè)線(xiàn)程來(lái)處理該客戶(hù)端的所有請(qǐng)求,客戶(hù)端請(qǐng)求登錄時(shí)會(huì)向服務(wù)器發(fā)送登錄時(shí)需要的信息,這些信息包括:用戶(hù)名、密碼、在線(xiàn)狀態(tài)、請(qǐng)求類(lèi)型。服務(wù)器接收到登錄消息后提取出請(qǐng)求類(lèi)型,根據(jù)請(qǐng)求類(lèi)型將傳送過(guò)來(lái)的Json數(shù)據(jù)轉(zhuǎn)化為對(duì)象,然后去數(shù)據(jù)庫(kù)中查詢(xún)?cè)撚脩?hù)是否存在,如果存在的話(huà)再判斷該用戶(hù)的用戶(hù)名和密碼是否正確,如果正確則給客戶(hù)端發(fā)送成功的消息,否則發(fā)送失敗的消息,服務(wù)器返回的消息也是以Json數(shù)據(jù)的形式發(fā)送給客戶(hù)端,返回消息里面包括返回類(lèi)型,客戶(hù)端根據(jù)返回類(lèi)型做出相應(yīng)的處理,如果登錄成功則跳到主界面,否則提示用戶(hù)登錄失敗。
查找好友界面對(duì)應(yīng)的類(lèi)為:FindActivity.java。當(dāng)用戶(hù)點(diǎn)擊查找按鈕時(shí)會(huì)調(diào)用find(View view)方法。該方法首先會(huì)判斷用戶(hù)輸入的關(guān)鍵字是不是為空,如果為空則提示用戶(hù)輸入關(guān)鍵字,如果不為空則調(diào)用SocketSingle的SendMsg()方法給服務(wù)器發(fā)送消息。
服務(wù)器一直監(jiān)聽(tīng)客戶(hù)端發(fā)送過(guò)來(lái)的消息,接收到消息后則根據(jù)請(qǐng)求類(lèi)型將客戶(hù)端發(fā)送過(guò)來(lái)的Json數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的對(duì)象,然后使用該對(duì)象去數(shù)據(jù)庫(kù)中查詢(xún)相關(guān)好友,查詢(xún)相關(guān)好友。服務(wù)器將查詢(xún)出來(lái)的好友轉(zhuǎn)化為Json數(shù)據(jù)再返回給客戶(hù)端,客戶(hù)端根據(jù)返回類(lèi)型來(lái)做相應(yīng)的處理。
聊天信息以列表的形式展現(xiàn)給用戶(hù),聊天信息分為五種:文本、圖片、動(dòng)畫(huà)、音頻、視頻。選擇發(fā)送類(lèi)型對(duì)應(yīng)的類(lèi)為:ChatingActivity.java。發(fā)送消息不可以為空,點(diǎn)擊發(fā)送按鈕會(huì)調(diào)用ChatingAvtivity的send方法,該方法首先判斷發(fā)送內(nèi)容是否為空,然后組裝待發(fā)送的聊天信息,待發(fā)送的消息內(nèi)容包括用戶(hù)名、好友用戶(hù)名、聊天內(nèi)容、發(fā)送時(shí)間、用戶(hù)昵稱(chēng)、請(qǐng)求類(lèi)型,如圖4所示為發(fā)送信息界面圖[6]。
圖4 發(fā)送信息界面圖Fig.4 Send information interface diagram
服務(wù)器接收到客戶(hù)端發(fā)送過(guò)來(lái)的消息后提取出客戶(hù)端的請(qǐng)求類(lèi)型,根據(jù)請(qǐng)求類(lèi)型將Json數(shù)據(jù)轉(zhuǎn)化為對(duì)象,然后根據(jù)好友用戶(hù)名查找好友的Socket對(duì)象,根據(jù)Socket對(duì)象可以得到好友的輸入流和輸出流,接著把json數(shù)據(jù)轉(zhuǎn)發(fā)給好友,好友根據(jù)服務(wù)器發(fā)送過(guò)來(lái)的數(shù)據(jù)提取出返回類(lèi)型,根據(jù)返回類(lèi)型轉(zhuǎn)化為相應(yīng)的對(duì)象,從對(duì)象里提取出聊天內(nèi)容并展示給用戶(hù)。
本文使用Android手機(jī)平臺(tái)在智能手機(jī)上開(kāi)發(fā)的通信軟件,可以在安裝本軟件的手機(jī)用戶(hù)之間發(fā)送多媒體短信,用戶(hù)使用體驗(yàn)良好,是一種Android手機(jī)平臺(tái)的較為新穎的多媒體短信應(yīng)用解決方案。但是在用戶(hù)發(fā)送二進(jìn)制文件時(shí)傳輸時(shí)間太長(zhǎng),這也是今后系統(tǒng)改進(jìn)的方向。
[1]王明勇,王林,吳根金,等.基于Android手機(jī)3G網(wǎng)絡(luò)遠(yuǎn)程可移動(dòng)監(jiān)控系統(tǒng)[J].電子世界,2014(11):17-18.WANG MING-yong,WANG Lin,WU GENG-jin,et al.Based on the Android mobile remote monitoring system of 3G network[J].Electronics World,2014(11):17-18.
[2]齊加文.基于Android平臺(tái)刮刮樂(lè)彩票軟件的研究與實(shí)現(xiàn)[D].內(nèi)蒙:內(nèi)蒙古師范大學(xué),2011.
[3]袁方.基于Android平臺(tái)的手機(jī)混沌加密系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].杭州:杭州電子科技大學(xué),2013.
[4]朱竑宇.基于Android手機(jī)平臺(tái)的智能家居安防系統(tǒng)設(shè)計(jì)[D].哈爾濱:哈爾濱理工大學(xué),2013.
[5]崔栩凱.基于Android手機(jī)的定位及信息檢測(cè)的應(yīng)用開(kāi)發(fā)[D].北京:北京郵電大學(xué),2013.
[6]楊敏.基于Android短信平臺(tái)技術(shù)的研究與實(shí)現(xiàn)[D].昆明:昆明理工大學(xué),2012.