基于Socket的安卓端的虚拟短信发送框架研究与实现

2016-06-20 08:08蒲海洋徐舟李尧
2016年18期
关键词:引言

蒲海洋++徐舟++李尧

摘要:手机作为世界上科学进步的产物,它的出现,影响了全世界的人们生活方式。在这以手机作为媒介的背景下,随之短信的出现也逐渐替代了以文字沟通为主的传统信件。通过短信,可以达到实时存取且永久保存信息的功能。在这以网络为主体的当前现状下,为了节约通信费用,我们可以采用当前技术来实现模拟短信的功能。本文介绍了一种通过基于Socket的DDPUSH框架来实现在安卓端进行短信模拟发送与接收的功能。

关键词:Android;Socket;虚拟短信;ddpush一、引言

手机短信由于其具有实时性与便捷性而被广泛使用。手机短信创建于上上世纪八十年代晚期,用于配合GSM(全球移动通信系统)的数字技术,通过基站来传输数据。但由于每发送一条短信,需要支付一定的费用,如果有另一种办法来实现短信的功能,就可以了。

二、DDPUSH研究

(一)DDPUSH简介。DDPush (Dimension Door Push),任意门推送,是一款开源免费的单机千万级实时信息推送服务器,使用Java语言开发,具有简单、稳定、高性能、高容量等特点,适用于互联网、移动互联网、物联网、Android、智能设备、硬件设备等各种环境。

(二)DDPUSH特点与实现原理。Ddpush采用Apache License Version 2.0开源协议开发,具有源码开放且使用免费的特点。同时,DDPUSH中的在线部分主要采用UDP协议开发,支技1000万终端在线的服务器,最少只需要4G内存,故采用一台普通的PC机都可以作为服务器。其中的消息推送部分采用JAVA NIO(非阻塞网络技术)和TCP协议开发,如采用普通PC即可支持至少数千台应用服务器同时通过长连接方式将消息推送到终端,且每秒可推送上万条数据。具有容量高,速度快,要求低的特点。在耗电与流量使用情况方面,DDPUSH经过测试比目前大多应用耗电低,同时具有流量少,省电等特点。

三、DDPUSH安装与部署

(一)DDPUSH获取。DDPush由于是免费的开源项目,用户可从其官方网站(www.ddpush.net)下载。通过链接,找到对应的下载链接,下载ddpush Server端即可。

(二)DDPUSH安装与部署。DDPUSH由JAVA语言编写,安装时确保机器上已有JDK环境。部署时,如想采用默认配置,则直接运行工程目录下的start.bat即可,运行成功后,会占用9900、9966、9999端口,故在部署前确保9900、9966、9999端口未被其他程序占用。若无异常情况等待几秒后,则会部署成功,运行成功。

四、安卓端APP短信接收研究

(一)AndroidAPP短信接收原理。在安卓系统中,当有短信到来时,会首先给手机发出一个广播(android.provider.Telephony.SMS_RECEIVED),在此广播中存放了与短信相关的信息,在安卓系统中,存放在Bundle中。当系统接收到此广播后,系统会根据当前的系统设置对此短信进行操作处理,如播放短信到来的铃声、震动、通知栏添加。最终,将此短信插入到系统的sqlite数据库中,其具体位置为:”./data/data/com.android.providers.telephony/databases/mmssms.db”。其中短信对应的表为sms。

(二)短信数据库URI。在安卓系统四大组件中,提供了一个可以访问数据的组件,即内容提供者(Content Provider)。安卓系统中将短信所对应的表已开放出来了,故我们可以通过ContentResolver对数据进行操作。通过翻看Android API文档,便可以获取短信所对应的Uri的地址,为content://sms/。

五、采用DDPUSH实现虚拟短信的Android客户端设计

(一)短信服务端搭建。短信服务端故可以直接运行ddpush的Server端,将其ddpush服务端运行在服务器上,并开放设定好的端口,服务端的搭建工作完成。

(二)app端搭建。在安卓系统中,由于要使用到Socket通信及对短信数据表进行操作,需要在APP中清单文件中申明网络访问权限、读取短信权限、写入短信权限。

同时,为了程序的监听实时性考虑,应当让程序一启动就运行在手机中,且最好永久运行,综上所述,选用安卓中的Service与Broadcast Receiver相结合的方式来开发此应用最为合适,通过在APP中声明一个监听设备完全启动的Broadcast,当手机完全启动后,通过拦截手机完全启动的广播,通过Broadcast Receiver启动与ddpush对应的Service,这样就保证了短信接收进程一直处于启动状态。其次,为了防止网络状态的变化,再在APP中声明注册网络状态变化的监听器,这样当手机启动或网络状态变化时,都会启动ddpush短信服务,从而达到短信服务长久贮存在手机运行内存中,提高接收短信的概率。

由于ddpush协议中只包含两个字段的定义,一是对消息目标的定义,二是对消息内容的定义。然后短信则包含发送方、内容、发送时间字段,故需要对ddpush协议进行扩充。由于原目标定义所占用空间较小,不适合二次开发,故选用对消息内容进行二次开发。分析短信的特点后,发现短信全由文字构成,且出于对消息所占用流量等特点考虑,本应用选用json作为短信发送的协议。本短信协议定义主要如下:名称作用toUser目标方fromUser发送方sendTime发送时间content发送内容当ddpush短信服务接收到短信消息后,在APP会首先根据系统的设置,通过ContentResolver向短信数据表中插入对应的数据,再系手机发出特定的铃声和振动,并通过安卓SDK中的NotificationManager向系统通知栏插入一条短信的条目。

(三)短信发送测试。将服务端与APP客户端(小米4)部署好后,在一个APP中输入另一个APP的唯一标识,并输入消息内容。点击发送,很快,另一端就收到了通过网络发送过来的消息。

六、结束语

采用这种Socket方式来实现的短信应用在费用方面相对于传统短信可以减少一定的费用,特别是在群组发送方面更显示出这种优势。但同时也存在很严重的弊端,如发送双方都必须安装此应用;保持移动数据流量畅通;此应用目前仅仅局限于安卓应用。同时,网络编程也给我们带来了无限的遐想空间,结合网络编程与当前的互联网趋势,任可以开发出各种有用的应用。

项目名称:基于Socket的安卓端的虚拟短信发送框架研究与实现,项目编号:15NSD-135

参考文献:

[1]梅蕊.跨服务器消息发布与推送机制的研究[学位论文].武汉:华中科技大学,2011.

[2]IBM.MQ Telemetry Transport.http://mqtt.org.2013-06-05.

[3]DDPUSH. http://www.ddpush.net/ddpush-1.0-doc/index.html

猜你喜欢
引言
校企合作背景下高职院校学生管理制度的探索
解读《欧也妮·葛朗台》中金钱禁锢下的人生
基于思维导图的线性代数复习策略
提高小学低段课堂写字有效性的研究