1、基于 Socket 的安卓端的虚拟短信发送框架研究与实现 摘要:手机作为世界上科学进步的产物,它的出现,影响了全世界的人们生活方式。在这以手机作为媒介的背景下,随之短信的出现也逐渐替代了以文字沟通为主的传统信件。通过短信,可以达到实时存取且永久保存信息的功能。在这以网络为主体的当前现状下,为了节约通信费用,我们可以采用当前技术来实现模拟短信的功能。本文介绍了一种通过基于Socket 的 DDPUSH 框架来实现在安卓端进行短信模拟发送与接收的功能。 下载 关键词: Android; Socket;虚拟短信; ddpush 一、引言 手机短信由于其具有实 时性与便捷性而被广泛使用。手机短信创建于
2、上上世纪八十年代晚期,用于配合 GSM(全球移动通信系统)的数字技术,通过基站来传输数据。但由于每发送一条短信,需要支付一定的费用,如果有另一种办法来实现短信的功能,就可以了。 二、 DDPUSH 研究 (一) DDPUSH 简介。 DDPush ( Dimension Door Push),任意门推送,是一款开源免费的单机千万级实时信息推送服务器,使用 Java 语言开发,具有简单、稳定、高性能、高容量等特点,适用于互联网、移动互联网、物联网、 Android、智能 设备、硬件设备等各种环境。 (二) DDPUSH特点与实现原理。 Ddpush采用 Apache License Versio
3、n 2.0开源协议开发,具有源码开放且使用免费的特点。同时, DDPUSH 中的在线部分主要采用 UDP 协议开发,支技 1000 万终端在线的服务器,最少只需要4G 内存,故采用一台普通的 PC 机都可以作为服务器。其中的消息推送部分采用 JAVA NIO(非阻塞网络技术)和 TCP 协议开发,如采用普通 PC 即可支持至少数千台应用服务器同时通过长连接方式将消息推送到终端,且每秒可推送上万条数据。具有容 量高,速度快,要求低的特点。在耗电与流量使用情况方面, DDPUSH 经过测试比目前大多应用耗电低,同时具有流量少,省电等特点。 三、 DDPUSH 安装与部署 (一) DDPUSH 获取
4、。 DDPush 由于是免费的开源项目,用户可从其官方网站(下载。通过链接,找到对应的下载链接,下载 ddpush Server 端即可。 (二) DDPUSH 安装与部署。 DDPUSH 由 JAVA 语言编写,安装时确保机器上已有 JDK 环境。部署时,如想采用默认配置,则直接运行工程目录下的start.bat 即可,运行成功 后,会占用 9900、 9966、 9999 端口,故在部署前确保 9900、 9966、 9999 端口未被其他程序占用。若无异常情况等待几秒后,则会部署成功,运行成功。 四、安卓端 APP 短信接收研究 (一) AndroidAPP 短信接收原理。在安卓系统中,
5、当有短信到来时,会首先给手机发出一个广播( andr 在此广播中存放了与短信相关的信息,在安卓系统中,存放在 Bundle 中。当系统接收到此广播后,系统会根据当前的系统设置对此短信进行操作处理,如播放短信到来的铃声、震动、通知栏添加。最终,将此短信插入到系 统的 sqlite 数据库中,其具体位置为: ”./data/data/ 其中短信对应的表为 sms。 (二)短信数据库 URI。在安卓系统四大组件中,提供了一个可以访问数据的组件,即内容提供者( Content Provider)。安卓系统中将短信所对应的表已开放出来了,故我们可以通过 ContentResolver对数据进行操作。通过
6、翻看 Android API 文档,便可以获取短信所对应的 Uri 的地址,为content: /sms/。 五、采用 DDPUSH 实现虚拟短信的 Android 客户端设计 (一)短信服务端搭建。短信服务端故可以直接运行 ddpush 的 Server端,将其 ddpush 服务端运行在服务器上,并开放设定好的端口,服务端的搭建工作完成。 (二) app 端搭建。在安卓系统中,由于要使用到 Socket 通信及对短信数据表进行操作,需要在 APP中清单文件中申明网络访问权限、读取短信权限、写入短信权限。 同时,为了程序的监听实时性考虑,应当让程序一启动就运行在手机中,且最好永久运行,综上所
7、述,选用安卓中的 Service与 Broadcast Receiver相结合的方式来开发 此应用最为合适,通过在 APP中声明一个监听设备完全启动的 Broadcast,当手机完全启动后,通过拦截手机完全启动的广播,通过 Broadcast Receiver 启动与 ddpush 对应的 Service,这样就保证了短信接收进程一直处于启动状态。其次,为了防止网络状态的变化,再在 APP中声明注册网络状态变化的监听器,这样当手机启动或网络状态变化时,都会启动 ddpush 短信服务,从而达到短信服务长久贮存在手机运行内存中,提高接收短信的概率。 由于 ddpush协议中只包含两个字段的定义,
8、一是对消息目标的 定义,二是对消息内容的定义。然后短信则包含发送方、内容、发送时间字段,故需要对 ddpush 协议进行扩充。由于原目标定义所占用空间较小,不适合二次开发,故选用对消息内容进行二次开发。分析短信的特点后,发现短信全由文字构成,且出于对消息所占用流量等特点考虑,本应用选用 json 作为短信发送的协议。本短信协议定义主要如下:名称作用 toUser 目标方fromUser发送方 sendTime发送时间 content发送内容当 ddpush短信服务接收到短信消息后,在 APP会首先根据系统的设置,通过 ContentResolver向短信数据表中插入对应的数据,再系手机发出特定
9、的铃声和振动,并通过安卓 SDK 中的 NotificationManager 向系统通知栏插入一条短信的条目。 (三)短信发送测试。将服务端与 APP 客户端(小米 4)部署好后,在一个 APP中输入另一个 APP的唯一标识,并输入消息内容。点击发送,很快,另一端就收到了通过网络发送过来的消息。 六、结束语 采用这种 Socket方式来实现的短信应用在费用方面相对于传统短信可以减少一定的费用,特别是在群组发送方面更显示出这种优势。但同时也存在很严重 的弊端,如发送双方都必须安装此应用;保持移动数据流量畅通;此应用目前仅仅局限于安卓应用。同时,网络编程也给我们带来了无限的遐想空间,结合网络编程与当前的互联网趋势,任可以开发出各种有用的应用。 项目名称:基于 Socket的安卓端的虚拟短信发送框架研究与实现,项目编号: 15NSD-135 参考文献: 梅蕊 .跨服务器消息发布与推送机制的研究 学位论文 .武汉:华中科技大学, 2011. DDP