《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于Android平臺的自發(fā)短信系統(tǒng)設計與實現(xiàn)
基于Android平臺的自發(fā)短信系統(tǒng)設計與實現(xiàn)
來源:電子技術應用2012年第12期
倪紅軍1, 錢昌俊2
1. 南京師范大學 泰州學院 信息工程學院,江蘇 泰州 225300; 2. 泰州機電高等職業(yè)技術學校 信息工程系,江蘇 泰州 225300
摘要: 基于Android手機操作系統(tǒng)開發(fā)了一款自發(fā)短信系統(tǒng)。利用SQLite數(shù)據(jù)庫存儲技術、Service啟動服務技術及Runnable接口,設計并實現(xiàn)了好友管理、短信管理、后臺檢測發(fā)送短信等功能,并給出了運行效果圖。該系統(tǒng)的實現(xiàn)為指定時間發(fā)送定制短信提供了很大的方便性。
中圖分類號: TN929.53
文獻標識碼: A
文章編號: 0258-7998(2012)12-0126-04
Design and implementation of spontaneous SMS based on the Android platform
Ni Hongjun1, Qian Changjun2
1.School of Information Engineering, Taizhou College,Nanjing Normal University, Taizhou 225300, China; 2. Department of Information Engineering, Taizhou Higher Vocational School of Mechanical & Electrical Technology, Taizhou 225300, China
Abstract: The use of the Android mobile operating system developed a spontaneous SMS system. The use of SQLite database storage technology, Service services technology and Runnable interface, the design and implementation of the friends management, message management, background detection send text messages and other functions, and gives the effect diagram. The realization of the system for the specified time to send customized SMS provides great convenience.
Key words : SQLite; background detection; Service; spontaneous SMS

    隨著3G業(yè)務的全面推廣,使用手機進行實時交流的需求也越來越大,短信服務由于其快捷方便和良好的交互性[1]廣受青睞。通常使用手機發(fā)送短信的形式比較單一,在需要發(fā)送信息時必須由人工干預將短信發(fā)送給一個或多個聯(lián)系人,而且同時發(fā)給多人時,短信內容相同。而人們在繁忙的工作和學習中往往會忘記一些必要的短信祝福、合作提醒等。為了解決這一問題,本文在Android平臺下,采用SharedPreferences、SQLite進行數(shù)據(jù)存儲,利用Service組件實現(xiàn)系統(tǒng)后臺運行,使用BaseAdapter適配器進行用戶界面顯示,設計了一個自發(fā)短信系統(tǒng)。該系統(tǒng)可以隨意設置短信內容、發(fā)送時間,在指定的時間當天,由系統(tǒng)自動給好友、生意伙伴等發(fā)送祝福短信、合作提醒,也可以設置給多人發(fā)送不同的短信。

1 Android系統(tǒng)
    Android是Google開發(fā)的基于Linux開放性內核的手機操作系統(tǒng),目前已廣泛應用于智能手機中。Android系統(tǒng)的軟件結構包含操作系統(tǒng)、中間件及一些關鍵的平臺應用程序。該系統(tǒng)采用軟件堆層(Software Stack)的架構[2-3],主要分為4個部分:(1)應用層,采用Java語言編寫,運行在Dalvik虛擬機,供用戶使用的應用程序;(2)應用框架層,使用API框架編寫Google發(fā)布的核心應用,開發(fā)人員可以使用這些框架開發(fā)自己的應用; (3)系統(tǒng)運行庫層;(4)Linux內核層,即硬件和軟件棧之間的抽象層,提供了Android系統(tǒng)的核心服務。
2 系統(tǒng)設計
    自發(fā)短信系統(tǒng)是用戶預先設定的信息內容和發(fā)送時間的好友列表,系統(tǒng)每24 h檢測一次好友信息。當好友的發(fā)送時間與手機設定時間一致時,就將該好友添加到發(fā)送集合中,由系統(tǒng)自動完成定制短信的發(fā)送。
2.1 系統(tǒng)功能設計
    按照用戶使用短信服務的習慣和需求,自發(fā)短信系統(tǒng)的主要功能模塊如圖1所示。

    (1)好友管理模塊:顯示已添加的好友信息(包括頭像、姓名、倒計時天數(shù)及發(fā)送狀態(tài)等);添加、修改、刪除好友信息。
    (2)短信管理模塊:顯示用戶設置的待發(fā)送短信內容;修改短信內容。
    (3)后臺檢測服務模塊:該模塊不間斷地在后臺運行,檢測好友列表中的發(fā)送日期與手機日期是否相同。如果相同,則根據(jù)選定的短信內容自動地向該好友發(fā)送信息,并在發(fā)送完成后修改發(fā)送狀態(tài)信息。如果不相同,則修改倒計時天數(shù)。
2.2 數(shù)據(jù)存儲設計
    隨著軟件應用程序逐漸模塊化,嵌入式數(shù)據(jù)庫可直接在應用程序進程中運行,提供了零配置運行模式,并且資源占用非常少。Android系統(tǒng)支持多種數(shù)據(jù)存儲技術,其中有簡單信息存儲方式SharedPreferences[4],也有內存占用少、效率高。支持 SQL 語言的輕量級嵌入式數(shù)據(jù)庫引擎——SQLite。在進行開發(fā)設計時,結合功能需求和軟件性能,本系統(tǒng)采用了SharedPreferences進行簡單短信信息存儲,及SQLite數(shù)據(jù)庫存儲數(shù)據(jù)量較大的好友信息。
    短信信息以sms_db.xml為文件名,存儲在默認位置/data/data/<包名>/shared_prefs目錄下,其內容格式如下:
    <?xml version=&prime;1.0&prime;encoding=&prime;utf-8&prime;standalone=&prime;yes&prime;?>
    <map>
     <string name="sms1">祝寶貝生日快樂,天天開心!</string>
     <string name="sms2">開業(yè)大吉,生意興?。?lt;/string>
  &hellip;&hellip;
    </map>
  數(shù)據(jù)庫myinformation.db存儲好友信息,結構如表1所示。

3 系統(tǒng)功能實現(xiàn)
    系統(tǒng)整體使用MVC模式設計,將數(shù)據(jù)(Model)、界面(View)、控制(Controller)分為不同的模塊,不僅使程序結構更加清晰,代碼更加健壯,而且降低了程序之間的耦合度,提高了模塊化程度[5]。
3.1 好友管理
3.1.1 好友列表顯示界面

    系統(tǒng)運行后,首先調用MainActivity.java顯示主界面,如圖2所示。主界面上的好友列表由ListView組件來實現(xiàn),該組件中的數(shù)據(jù)由繼承了BaseAdapter自定義的MainListAdapter適配器類來填充。實現(xiàn)代碼如下:

    Cursor c = managedQuery(MyInformation.CONNECT_URI,
MyInformation.SelectStrArr, null, null,MyInformation.DEFAULT_
SORT_ORDER);
    List<User> mList = new ArrayList<User>();
    c.moveToFirst();         // 實例化游標對象,查找數(shù)據(jù)庫
    if (c.getCount() > 0) {
        do {
            mList.add(new User(c));
          } while (c.moveToNext());
    }
    c.close();
    ListView  mainListView = (ListView) findViewById(R.id.
mainlist);                                            // 添加用戶到集合
    MainListAdapter mainListAdapter = new MainListAdapter
        (this, mList);                   // 實例化自定義適配器
    mainListView.setAdapter(mainListAdapter);
                                // 給ListView設置適配器
3.1.2 添加好友信息界面
    用戶單擊圖3主界面上的&ldquo;添加好友&rdquo;菜單后,將執(zhí)行如下代碼:

     Intent intentAdd = new Intent(MainActivity.this, InformationAdd.class);
     MainActivity.this.startActivity(intentAdd)
     然后顯示如圖3所示&ldquo;添加好友信息&rdquo;界面。通過此界面,可以設置好友姓名、電話號碼、定時發(fā)送時間(生日)、定時開啟狀態(tài)及短信內容。短信內容可以單獨設置,也可以點擊&ldquo;選擇已有的祝福&rdquo;按鈕選擇定制短信。
3.2 短信管理
    用戶單擊圖2主界面上的&ldquo;編輯短信&rdquo;菜單后,執(zhí)行PrepareSms類,該類繼承Avtivity類,實現(xiàn)了OnClickListener接口。然后進入短信顯示界面,通過自定義SelectSharedPreferencesDb類實例對象的getSMS( )方法讀取sms_db.xml文件,并把短信內容顯示在TextView上。單擊短信顯示文本框TextView,進入短信內容編輯界面,如圖4所示。編輯完成后調用saveSMS()方法保存短信內容到sms_db.xml文件,代碼如下:

 

 

    public class SelectSharedPreferencesDb {
    public static Map<String, String> getSMS(Context con) {
        Map<String, String> map=new HashMap<String, String>();
    SharedPreferences mysp = con.getSharedPreferences
("sms_db",Activity.MODE_PRIVATE);                 // 獲取sms
    map.put("sms1", mysp.getString("sms1", "寶貝!祝你生日快樂??!"));
    for (int i = 2; i < 11; i++) {
         String content = mysp.getString("sms" + i, "未設置");
                map.put("sms" + i, content);}
                return map;
    }                  //默認有第一條短信內容,可以修改
    public static void saveSMS(Context con, String num, String smscontent) {
    SharedPreferences mysp = con.getSharedPreferences
("sms_db",    Activity.MODE_PRIVATE);
    mysp.edit().putString(num, smscontent).commit();    }
}                                             // 保存sms
3.3 后臺檢測服務
  為了實現(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ā)步驟如下:
     (1) 繼承Service類
     public class MainService extends Service implements Runnable {&hellip;&hellip;}
     (2)在AndroidManifest.xml文件中的<application>節(jié)點里對服務進行配置
     <service android:name="ie.nnutc.edu.cn.MainService" >
     <intent-filter>
     <action android:name= "ie.nnutc.edu.cn.MainService "/ >
     </intent-filter>
     </service>
     (3) 啟動Service
  Intent it = new Intent("ie.nnutc.edu.cn.MainService ");
  this.startService(it)
3.3.2 實現(xiàn)時間檢測和短信發(fā)送線程
     在Java中通過繼承Thread類和實現(xiàn)Runnable接口兩種方式實現(xiàn)多線程,但由于一個類只能繼承一個父類[8],而MainService類已經繼承了Service類,所以本系統(tǒng)采用Runnable接口來實現(xiàn)時間檢測和短信發(fā)送線程。
    當檢測到發(fā)送日期與手機日期相同時,將好友信息加入發(fā)送集合,產生一個Message類信號放入消息隊列,并分發(fā)給Handler進行處理。Handler接收到消息后啟動短信發(fā)送代碼(本系統(tǒng)將該功能封裝成sendmessage方法)實現(xiàn)短信發(fā)送。部分代碼如下:
     Handler handler = new Handler() {
        public void handleMessage(Message msg) {
           switch (msg.what) {
           case SEND_MESSAGE:
             sendmessage(&hellip;&hellip;);         //執(zhí)行自發(fā)短信任務
                break;
            }
            super.handleMessage(msg);
         }
    }
    結合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.

此內容為AET網站原創(chuàng),未經授權禁止轉載。