蒲海洋++徐舟++李堯
摘要:手機作為世界上科學進步的產(chǎn)物,它的出現(xiàn),影響了全世界的人們生活方式。在這以手機作為媒介的背景下,隨之短信的出現(xiàn)也逐漸替代了以文字溝通為主的傳統(tǒng)信件。通過短信,可以達到實時存取且永久保存信息的功能。在這以網(wǎng)絡(luò)為主體的當前現(xiàn)狀下,為了節(jié)約通信費用,我們可以采用當前技術(shù)來實現(xiàn)模擬短信的功能。本文介紹了一種通過基于Socket的DDPUSH框架來實現(xiàn)在安卓端進行短信模擬發(fā)送與接收的功能。
關(guān)鍵詞:Android;Socket;虛擬短信;ddpush一、引言
手機短信由于其具有實時性與便捷性而被廣泛使用。手機短信創(chuàng)建于上上世紀八十年代晚期,用于配合GSM(全球移動通信系統(tǒng))的數(shù)字技術(shù),通過基站來傳輸數(shù)據(jù)。但由于每發(fā)送一條短信,需要支付一定的費用,如果有另一種辦法來實現(xiàn)短信的功能,就可以了。
二、DDPUSH研究
(一)DDPUSH簡介。DDPush (Dimension Door Push),任意門推送,是一款開源免費的單機千萬級實時信息推送服務(wù)器,使用Java語言開發(fā),具有簡單、穩(wěn)定、高性能、高容量等特點,適用于互聯(lián)網(wǎng)、移動互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、Android、智能設(shè)備、硬件設(shè)備等各種環(huán)境。
(二)DDPUSH特點與實現(xiàn)原理。Ddpush采用Apache License Version 2.0開源協(xié)議開發(fā),具有源碼開放且使用免費的特點。同時,DDPUSH中的在線部分主要采用UDP協(xié)議開發(fā),支技1000萬終端在線的服務(wù)器,最少只需要4G內(nèi)存,故采用一臺普通的PC機都可以作為服務(wù)器。其中的消息推送部分采用JAVA NIO(非阻塞網(wǎng)絡(luò)技術(shù))和TCP協(xié)議開發(fā),如采用普通PC即可支持至少數(shù)千臺應(yīng)用服務(wù)器同時通過長連接方式將消息推送到終端,且每秒可推送上萬條數(shù)據(jù)。具有容量高,速度快,要求低的特點。在耗電與流量使用情況方面,DDPUSH經(jīng)過測試比目前大多應(yīng)用耗電低,同時具有流量少,省電等特點。
三、DDPUSH安裝與部署
(一)DDPUSH獲取。DDPush由于是免費的開源項目,用戶可從其官方網(wǎng)站(www.ddpush.net)下載。通過鏈接,找到對應(yīng)的下載鏈接,下載ddpush Server端即可。
(二)DDPUSH安裝與部署。DDPUSH由JAVA語言編寫,安裝時確保機器上已有JDK環(huán)境。部署時,如想采用默認配置,則直接運行工程目錄下的start.bat即可,運行成功后,會占用9900、9966、9999端口,故在部署前確保9900、9966、9999端口未被其他程序占用。若無異常情況等待幾秒后,則會部署成功,運行成功。
四、安卓端APP短信接收研究
(一)AndroidAPP短信接收原理。在安卓系統(tǒng)中,當有短信到來時,會首先給手機發(fā)出一個廣播(android.provider.Telephony.SMS_RECEIVED),在此廣播中存放了與短信相關(guān)的信息,在安卓系統(tǒng)中,存放在Bundle中。當系統(tǒng)接收到此廣播后,系統(tǒng)會根據(jù)當前的系統(tǒng)設(shè)置對此短信進行操作處理,如播放短信到來的鈴聲、震動、通知欄添加。最終,將此短信插入到系統(tǒng)的sqlite數(shù)據(jù)庫中,其具體位置為:”./data/data/com.android.providers.telephony/databases/mmssms.db”。其中短信對應(yīng)的表為sms。
(二)短信數(shù)據(jù)庫URI。在安卓系統(tǒng)四大組件中,提供了一個可以訪問數(shù)據(jù)的組件,即內(nèi)容提供者(Content Provider)。安卓系統(tǒng)中將短信所對應(yīng)的表已開放出來了,故我們可以通過ContentResolver對數(shù)據(jù)進行操作。通過翻看Android API文檔,便可以獲取短信所對應(yīng)的Uri的地址,為content://sms/。
五、采用DDPUSH實現(xiàn)虛擬短信的Android客戶端設(shè)計
(一)短信服務(wù)端搭建。短信服務(wù)端故可以直接運行ddpush的Server端,將其ddpush服務(wù)端運行在服務(wù)器上,并開放設(shè)定好的端口,服務(wù)端的搭建工作完成。
(二)app端搭建。在安卓系統(tǒng)中,由于要使用到Socket通信及對短信數(shù)據(jù)表進行操作,需要在APP中清單文件中申明網(wǎng)絡(luò)訪問權(quán)限、讀取短信權(quán)限、寫入短信權(quán)限。
同時,為了程序的監(jiān)聽實時性考慮,應(yīng)當讓程序一啟動就運行在手機中,且最好永久運行,綜上所述,選用安卓中的Service與Broadcast Receiver相結(jié)合的方式來開發(fā)此應(yīng)用最為合適,通過在APP中聲明一個監(jiān)聽設(shè)備完全啟動的Broadcast,當手機完全啟動后,通過攔截手機完全啟動的廣播,通過Broadcast Receiver啟動與ddpush對應(yīng)的Service,這樣就保證了短信接收進程一直處于啟動狀態(tài)。其次,為了防止網(wǎng)絡(luò)狀態(tài)的變化,再在APP中聲明注冊網(wǎng)絡(luò)狀態(tài)變化的監(jiān)聽器,這樣當手機啟動或網(wǎng)絡(luò)狀態(tài)變化時,都會啟動ddpush短信服務(wù),從而達到短信服務(wù)長久貯存在手機運行內(nèi)存中,提高接收短信的概率。
由于ddpush協(xié)議中只包含兩個字段的定義,一是對消息目標的定義,二是對消息內(nèi)容的定義。然后短信則包含發(fā)送方、內(nèi)容、發(fā)送時間字段,故需要對ddpush協(xié)議進行擴充。由于原目標定義所占用空間較小,不適合二次開發(fā),故選用對消息內(nèi)容進行二次開發(fā)。分析短信的特點后,發(fā)現(xiàn)短信全由文字構(gòu)成,且出于對消息所占用流量等特點考慮,本應(yīng)用選用json作為短信發(fā)送的協(xié)議。本短信協(xié)議定義主要如下:名稱作用toUser目標方fromUser發(fā)送方sendTime發(fā)送時間content發(fā)送內(nèi)容當ddpush短信服務(wù)接收到短信消息后,在APP會首先根據(jù)系統(tǒng)的設(shè)置,通過ContentResolver向短信數(shù)據(jù)表中插入對應(yīng)的數(shù)據(jù),再系手機發(fā)出特定的鈴聲和振動,并通過安卓SDK中的NotificationManager向系統(tǒng)通知欄插入一條短信的條目。
(三)短信發(fā)送測試。將服務(wù)端與APP客戶端(小米4)部署好后,在一個APP中輸入另一個APP的唯一標識,并輸入消息內(nèi)容。點擊發(fā)送,很快,另一端就收到了通過網(wǎng)絡(luò)發(fā)送過來的消息。
六、結(jié)束語
采用這種Socket方式來實現(xiàn)的短信應(yīng)用在費用方面相對于傳統(tǒng)短信可以減少一定的費用,特別是在群組發(fā)送方面更顯示出這種優(yōu)勢。但同時也存在很嚴重的弊端,如發(fā)送雙方都必須安裝此應(yīng)用;保持移動數(shù)據(jù)流量暢通;此應(yīng)用目前僅僅局限于安卓應(yīng)用。同時,網(wǎng)絡(luò)編程也給我們帶來了無限的遐想空間,結(jié)合網(wǎng)絡(luò)編程與當前的互聯(lián)網(wǎng)趨勢,任可以開發(fā)出各種有用的應(yīng)用。
項目名稱:基于Socket的安卓端的虛擬短信發(fā)送框架研究與實現(xiàn),項目編號:15NSD-135
參考文獻:
[1]梅蕊.跨服務(wù)器消息發(fā)布與推送機制的研究[學位論文].武漢:華中科技大學,2011.
[2]IBM.MQ Telemetry Transport.http://mqtt.org.2013-06-05.
[3]DDPUSH. http://www.ddpush.net/ddpush-1.0-doc/index.html