倪紅軍,錢昌俊
(1.南京師范大學 泰州學院 信息工程學院,江蘇 泰州 225300;2.泰州機電高等職業(yè)技術學校 信息工程系,江蘇 泰州 225300)
隨著3G業(yè)務的全面推廣,使用手機進行實時交流的需求也越來越大,短信服務由于其快捷方便和良好的交互性[1]廣受青睞。通常使用手機發(fā)送短信的形式比較單一,在需要發(fā)送信息時必須由人工干預將短信發(fā)送給一個或多個聯(lián)系人,而且同時發(fā)給多人時,短信內(nèi)容相同。而人們在繁忙的工作和學習中往往會忘記一些必要的短信祝福、合作提醒等。為了解決這一問題,本文在Android平臺下,采用SharedPreferences、SQLite進行數(shù)據(jù)存儲,利用Service組件實現(xiàn)系統(tǒng)后臺運行,使用BaseAdapter適配器進行用戶界面顯示,設計了一個自發(fā)短信系統(tǒng)。該系統(tǒng)可以隨意設置短信內(nèi)容、發(fā)送時間,在指定的時間當天,由系統(tǒng)自動給好友、生意伙伴等發(fā)送祝福短信、合作提醒,也可以設置給多人發(fā)送不同的短信。
Android是Google開發(fā)的基于Linux開放性內(nèi)核的手機操作系統(tǒng),目前已廣泛應用于智能手機中。Android系統(tǒng)的軟件結(jié)構包含操作系統(tǒng)、中間件及一些關鍵的平臺應用程序。該系統(tǒng)采用軟件堆層(Software Stack)的架構[2-3],主要分為4個部分:(1)應用層,采用Java語言編寫,運行在Dalvik虛擬機,供用戶使用的應用程序;(2)應用框架層,使用API框架編寫 Google發(fā)布的核心應用,開發(fā)人員可以使用這些框架開發(fā)自己的應用;(3)系統(tǒng)運行庫層;(4)Linux內(nèi)核層,即硬件和軟件棧之間的抽象層,提供了Android系統(tǒng)的核心服務。
自發(fā)短信系統(tǒng)是用戶預先設定的信息內(nèi)容和發(fā)送時間的好友列表,系統(tǒng)每24 h檢測一次好友信息。當好友的發(fā)送時間與手機設定時間一致時,就將該好友添加到發(fā)送集合中,由系統(tǒng)自動完成定制短信的發(fā)送。
按照用戶使用短信服務的習慣和需求,自發(fā)短信系統(tǒng)的主要功能模塊如圖1所示。
(1)好友管理模塊:顯示已添加的好友信息(包括頭像、姓名、倒計時天數(shù)及發(fā)送狀態(tài)等);添加、修改、刪除好友信息。
圖1 自發(fā)短信系統(tǒng)功能模塊
(2)短信管理模塊:顯示用戶設置的待發(fā)送短信內(nèi)容;修改短信內(nèi)容。
(3)后臺檢測服務模塊:該模塊不間斷地在后臺運行,檢測好友列表中的發(fā)送日期與手機日期是否相同。如果相同,則根據(jù)選定的短信內(nèi)容自動地向該好友發(fā)送信息,并在發(fā)送完成后修改發(fā)送狀態(tài)信息。如果不相同,則修改倒計時天數(shù)。
隨著軟件應用程序逐漸模塊化,嵌入式數(shù)據(jù)庫可直接在應用程序進程中運行,提供了零配置運行模式,并且資源占用非常少。Android系統(tǒng)支持多種數(shù)據(jù)存儲技術,其中有簡單信息存儲方式 SharedPreferences[4],也有內(nèi)存占用少、效率高。支持 SQL語言的輕量級嵌入式數(shù)據(jù)庫引擎——SQLite。在進行開發(fā)設計時,結(jié)合功能需求和軟件性能,本系統(tǒng)采用了SharedPreferences進行簡單短信信息存儲,及SQLite數(shù)據(jù)庫存儲數(shù)據(jù)量較大的好友信息。
短信信息以sms_db.xml為文件名,存儲在默認位置/data/data/<包名>/shared_prefs目錄下,其內(nèi)容格式如下:
數(shù)據(jù)庫myinformation.db存儲好友信息,結(jié)構如表1所示。
表1 好友信息表
系統(tǒng)整體使用MVC模式設計,將數(shù)據(jù) (Model)、界面(View)、控制(Controller)分為不同的模塊,不僅使程序結(jié)構更加清晰,代碼更加健壯,而且降低了程序之間的耦合度,提高了模塊化程度[5]。
3.1.1 好友列表顯示界面
系統(tǒng)運行后,首先調(diào)用MainActivity.java顯示主界面,如圖2所示。主界面上的好友列表由ListView組件來實現(xiàn),該組件中的數(shù)據(jù)由繼承了BaseAdapter自定義的MainListAdapter適配器類來填充。實現(xiàn)代碼如下:
圖2 好友列表界面
3.1.2 添加好友信息界面
用戶單擊圖3主界面上的“添加好友”菜單后,將執(zhí)行如下代碼:
圖3 添加好友界面
然后顯示如圖3所示“添加好友信息”界面。通過此界面,可以設置好友姓名、電話號碼、定時發(fā)送時間(生日)、定時開啟狀態(tài)及短信內(nèi)容。短信內(nèi)容可以單獨設置,也可以點擊“選擇已有的祝福”按鈕選擇定制短信。
用戶單擊圖2主界面上的“編輯短信”菜單后,執(zhí)行PrepareSms類,該類繼承Avtivity類,實現(xiàn)了OnClickListener接口。然后進入短信顯示界面,通過自定義Select-SharedPreferencesDb類實例對象的getSMS()方法讀取sms_db.xml文件,并把短信內(nèi)容顯示在TextView上。單擊短信顯示文本框TextView,進入短信內(nèi)容編輯界面,如圖4所示。編輯完成后調(diào)用saveSMS()方法保存短信內(nèi)容到sms_db.xml文件,代碼如下:
圖4 短信管理界面
為了實現(xiàn)系統(tǒng)在指定日期自發(fā)短信,必須啟動監(jiān)聽測試服務,并且始終在后臺運行,每隔24 h自動檢測手機日期與指定日期是否一致,并作相應處理。Android系統(tǒng)提供了Service組件來實現(xiàn)服務的后臺運行[6],通過實現(xiàn)Runnable接口的方法啟動線程對短信發(fā)送日期進行檢測。本系統(tǒng)自定義一個MainService類,它繼承了Service,實現(xiàn)了Runnable接口具體實現(xiàn)功能。
3.3.1 Service后臺服務
Service組件與Activity組件類似,但它一直在后臺運行,沒有用戶界面[7],該組件的啟動有兩種方式:context.startService()和 context.bindService()。 開發(fā)步驟如下:
3.3.2 實現(xiàn)時間檢測和短信發(fā)送線程
在Java中通過繼承Thread類和實現(xiàn)Runnable接口兩種方式實現(xiàn)多線程,但由于一個類只能繼承一個父類[8],而 MainService類已經(jīng)繼承了 Service類,所以本系統(tǒng)采用Runnable接口來實現(xiàn)時間檢測和短信發(fā)送線程。
當檢測到發(fā)送日期與手機日期相同時,將好友信息加入發(fā)送集合,產(chǎn)生一個Message類信號放入消息隊列,并分發(fā)給Handler進行處理。Handler接收到消息后啟動短信發(fā)送代碼 (本系統(tǒng)將該功能封裝成sendmessage方法)實現(xiàn)短信發(fā)送。部分代碼如下:
結(jié)合Android系統(tǒng)手機用戶的實際需要,本文基于SQLite存儲技術、Service后臺服務技術和消息處理機制設計了自發(fā)短信系統(tǒng),成功地解決了按時發(fā)送定制信息這一問題。通過實際項目驗證了設計的正確性和可行性。隨著3G的到來,利用 Android系統(tǒng)提供的拍照、錄音等功能,也可實現(xiàn)圖片、音頻等多媒體信息的自動發(fā)送,從而使自發(fā)短信系統(tǒng)的應用前景更加廣泛。
[1]沈冰,陳向東,黃馨竹,等.基于 J2ME技術的短信智能回復系統(tǒng)的設計與實現(xiàn)[J].計算機應用研究,2007,24(12):263-265.
[2]王向輝,張國印,沈潔.Android應用程序開發(fā)[M].北京:清華大學出版社,2010.
[3]姚昱昱,劉衛(wèi)國.Android的架構與應用開發(fā)研究[J].計算機系統(tǒng)應用,2008,17(11):110-112.
[4]郭宏志.Android應用開發(fā)詳解[M].北京:電子工業(yè)出版社,2010.
[5]GAO J,MODAK M,DORNADULA S,et al.A wirelessbased text chatting system[C].2004 IEEE International Conference on E-Commerce Technology,2004.
[6]張元亮.Android開發(fā)應用實戰(zhàn)詳解[M].北京:中國鐵道出版社,2010.
[7]王秀芳,楊陽.基于Android的YOBO在線音樂播放器[J].科學技術與工程,2011,11(11):2506-2509.
[8]張雪萍,鮑丹,王家耀.Java多線程測試策略及測試方法探討[J].計算機應用研究,2006,23(11):12-14.