《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于Android平台的自发短信系统设计与实现
基于Android平台的自发短信系统设计与实现
来源:电子技术应用2012年第12期
倪红军1, 钱昌俊2
1. 南京师范大学 泰州学院 信息工程学院,江苏 泰州 225300; 2. 泰州机电高等职业技术学校 信息工程系,江苏 泰州 225300
摘要: 基于Android手机操作系统开发了一款自发短信系统。利用SQLite数据库存储技术、Service启动服务技术及Runnable接口,设计并实现了好友管理、短信管理、后台检测发送短信等功能,并给出了运行效果图。该系统的实现为指定时间发送定制短信提供了很大的方便性。
中图分类号: 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业务的全面推广,使用手机进行实时交流的需求也越来越大,短信服务由于其快捷方便和良好的交互性[1]广受青睐。通常使用手机发送短信的形式比较单一,在需要发送信息时必须由人工干预将短信发送给一个或多个联系人,而且同时发给多人时,短信内容相同。而人们在繁忙的工作和学习中往往会忘记一些必要的短信祝福、合作提醒等。为了解决这一问题,本文在Android平台下,采用SharedPreferences、SQLite进行数据存储,利用Service组件实现系统后台运行,使用BaseAdapter适配器进行用户界面显示,设计了一个自发短信系统。该系统可以随意设置短信内容、发送时间,在指定的时间当天,由系统自动给好友、生意伙伴等发送祝福短信、合作提醒,也可以设置给多人发送不同的短信。

1 Android系统
    Android是Google开发的基于Linux开放性内核的手机操作系统,目前已广泛应用于智能手机中。Android系统的软件结构包含操作系统、中间件及一些关键的平台应用程序。该系统采用软件堆层(Software Stack)的架构[2-3],主要分为4个部分:(1)应用层,采用Java语言编写,运行在Dalvik虚拟机,供用户使用的应用程序;(2)应用框架层,使用API框架编写Google发布的核心应用,开发人员可以使用这些框架开发自己的应用; (3)系统运行库层;(4)Linux内核层,即硬件和软件栈之间的抽象层,提供了Android系统的核心服务。
2 系统设计
    自发短信系统是用户预先设定的信息内容和发送时间的好友列表,系统每24 h检测一次好友信息。当好友的发送时间与手机设定时间一致时,就将该好友添加到发送集合中,由系统自动完成定制短信的发送。
2.1 系统功能设计
    按照用户使用短信服务的习惯和需求,自发短信系统的主要功能模块如图1所示。

    (1)好友管理模块:显示已添加的好友信息(包括头像、姓名、倒计时天数及发送状态等);添加、修改、删除好友信息。
    (2)短信管理模块:显示用户设置的待发送短信内容;修改短信内容。
    (3)后台检测服务模块:该模块不间断地在后台运行,检测好友列表中的发送日期与手机日期是否相同。如果相同,则根据选定的短信内容自动地向该好友发送信息,并在发送完成后修改发送状态信息。如果不相同,则修改倒计时天数。
2.2 数据存储设计
    随着软件应用程序逐渐模块化,嵌入式数据库可直接在应用程序进程中运行,提供了零配置运行模式,并且资源占用非常少。Android系统支持多种数据存储技术,其中有简单信息存储方式SharedPreferences[4],也有内存占用少、效率高。支持 SQL 语言的轻量级嵌入式数据库引擎——SQLite。在进行开发设计时,结合功能需求和软件性能,本系统采用了SharedPreferences进行简单短信信息存储,及SQLite数据库存储数据量较大的好友信息。
    短信信息以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">开业大吉,生意兴隆!</string>
  &hellip;&hellip;
    </map>
  数据库myinformation.db存储好友信息,结构如表1所示。

3 系统功能实现
    系统整体使用MVC模式设计,将数据(Model)、界面(View)、控制(Controller)分为不同的模块,不仅使程序结构更加清晰,代码更加健壮,而且降低了程序之间的耦合度,提高了模块化程度[5]。
3.1 好友管理
3.1.1 好友列表显示界面

    系统运行后,首先调用MainActivity.java显示主界面,如图2所示。主界面上的好友列表由ListView组件来实现,该组件中的数据由继承了BaseAdapter自定义的MainListAdapter适配器类来填充。实现代码如下:

    Cursor c = managedQuery(MyInformation.CONNECT_URI,
MyInformation.SelectStrArr, null, null,MyInformation.DEFAULT_
SORT_ORDER);
    List<User> mList = new ArrayList<User>();
    c.moveToFirst();         // 实例化游标对象,查找数据库
    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;菜单后,将执行如下代码:

     Intent intentAdd = new Intent(MainActivity.this, InformationAdd.class);
     MainActivity.this.startActivity(intentAdd)
     然后显示如图3所示&ldquo;添加好友信息&rdquo;界面。通过此界面,可以设置好友姓名、电话号码、定时发送时间(生日)、定时开启状态及短信内容。短信内容可以单独设置,也可以点击&ldquo;选择已有的祝福&rdquo;按钮选择定制短信。
3.2 短信管理
    用户单击图2主界面上的&ldquo;编辑短信&rdquo;菜单后,执行PrepareSms类,该类继承Avtivity类,实现了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 后台检测服务
  为了实现系统在指定日期自发短信,必须启动监听测试服务,并且始终在后台运行,每隔24 h自动检测手机日期与指定日期是否一致,并作相应处理。Android系统提供了Service组件来实现服务的后台运行[6],通过实现Runnable接口的方法启动线程对短信发送日期进行检测。本系统自定义一个MainService类,它继承了Service,实现了Runnable接口具体实现功能。
3.3.1 Service后台服务
     Service组件与Activity组件类似,但它一直在后台运行,没有用户界面[7],该组件的启动有两种方式:context.startService()和context.bindService()。开发步骤如下:
     (1) 继承Service类
     public class MainService extends Service implements Runnable {&hellip;&hellip;}
     (2)在AndroidManifest.xml文件中的<application>节点里对服务进行配置
     <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 实现时间检测和短信发送线程
     在Java中通过继承Thread类和实现Runnable接口两种方式实现多线程,但由于一个类只能继承一个父类[8],而MainService类已经继承了Service类,所以本系统采用Runnable接口来实现时间检测和短信发送线程。
    当检测到发送日期与手机日期相同时,将好友信息加入发送集合,产生一个Message类信号放入消息队列,并分发给Handler进行处理。Handler接收到消息后启动短信发送代码(本系统将该功能封装成sendmessage方法)实现短信发送。部分代码如下:
     Handler handler = new Handler() {
        public void handleMessage(Message msg) {
           switch (msg.what) {
           case SEND_MESSAGE:
             sendmessage(&hellip;&hellip;);         //执行自发短信任务
                break;
            }
            super.handleMessage(msg);
         }
    }
    结合Android系统手机用户的实际需要,本文基于SQLite存储技术、Service后台服务技术和消息处理机制设计了自发短信系统,成功地解决了按时发送定制信息这一问题。通过实际项目验证了设计的正确性和可行性。随着3G的到来,利用 Android系统提供的拍照、录音等功能,也可实现图片、音频等多媒体信息的自动发送,从而使自发短信系统的应用前景更加广泛。
参考文献
[1] 沈冰,陈向东,黄馨竹,等.基于J2ME技术的短信智能回复系统的设计与实现[J].计算机应用研究,2007,24 (12):263-265.
[2] 王向辉,张国印,沈洁.Android应用程序开发[M].北京:清华大学出版社,2010.
[3] 姚昱昱,刘卫国.Android的架构与应用开发研究[J].计算机系统应用,2008,17(11):110-112.
[4] 郭宏志.Android应用开发详解[M].北京:电子工业出版 社,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开发应用实战详解[M].北京:中国铁道出版社,2010.
[7] 王秀芳,杨阳.基于Android的YOBO在线音乐播放器[J]. 科学技术与工程,2011,11(11):2506-2509.
[8] 张雪萍,鲍丹,王家耀.Java多线程测试策略及测试方法探讨[J].计算机应用研究,2006,23(11):12-14.

此内容为AET网站原创,未经授权禁止转载。