前些日子,做了一个短信事务平台的软件,现在把在开发心得写出来,与大家共享。jSMSEngine开源包可以利用GSM Modem或带有红外线、蓝牙、数据线的手机与电脑连通,收发短信。有了此功能,我们就可以做很多手机做不了的事情。比如保存重要的短信、短信群发、共享收发短信等。
话不多说,先到http://jsmsengine.sourceforge.net/下载开源包,笔者试过几个版本,感觉1_2_6-B1版本比较稳定。包括comm和jSMSEngine。将jsmsengine_1_2_6-B1解压,可以看到相关的jar包、源码、文档、例子以及一个简单的SMS服务器程序。
先来配置开发环境环境。
1. 复制comm.jar、jSMSEngine.jar到(JDKDIR)\lib\ext文件夹下,或把开发包添加到开发环境中。
2. 复制javax.comm.properties到(JDKDIR)\jre\lib目录下。
3. 复制win32com.dll到(JDKDIR)\jre\bin目录下。(以上红色这里很重要)
在examples文件夹下,有个SendMessage.java的原文件,这是他自带发短信的例子,我们就从这里出发。
int status;//记录连接状态
CService srv = new CService("com1", 9600);//创建jSMSEngine服务,第一个参数是连接端口,第二个参数是连接速率
srv.initialize();//初始化jSMSEngine服务
srv.setCacheDir(".\\");//设备jSMSEngine服务的缓存
status = srv.connect();//连接设备 这设备可以是GSM Modem、带有红外线、蓝牙、数据线的手机
if (status == CService.ERR_OK){//如果连通状态OK
srv.setOperationMode(CService.MODE_PDU);//设置模式
srv.setSmscNumber("");
//System.out.println()方法是输入连接状态信息
COutgoingMessage msg = new COutgoingMessage("13500000000", "test");//创建发短信实例,第一个参数是接收的手机号码,第二个参数是短信内容。
if(srv.sendMessage(msg) == CService.ERR_OK)
System.out.println("Message Sent!");//如果发送成功,就输入Message Sent!
else
System.out.println("Message Failed!");//否则输入Message Failed!
srv.disconnect();//断开连接
}
else{
System.out.println("Connection to mobile failed, error: " + status);//如果连接状态失败,则输入Connection to mobile failed, error:和失败的参数,这就是常见的-11,或-22等信息
}
用JCreator编译该文件,如果程序出现如下错误:
Error loading win32com: java.lang.UnsatisfiedLinkError: no win32com in java.library.path
Connection to mobile failed, error: -11
根据错误提示,引用的一个java在windowns下访问串口的必备动态链接库——win32com.dll,找到这个东东后把它拷贝到JDK安装目录下的bin文件夹下。
以上是发短信,examples文件夹下,还有个ReadMessages.java文件,是用来收短信的。与发短信相对比,只是以下语句不同,其它都是一样的。
if (srv.readMessages(msgList, CIncomingMessage.CLASS_ALL) ==CService. ERR_OK){//如连接OK,读取设置内的短信信息也OK
for (int i = 0; i < msgList.size(); i ++){
CIncomingMessage msg = (CIncomingMessage) msgList.get(i);//读取短信,并保存在msg对象里
System.out.println(msg);
}
}
msg对象里,还有几个方法,getOriginator()获取电话号码,getDate()获取发短信时间, getText()获取短信内容。
我们主要用的的就是发短信,收短信。只是这开发包是集成了超级终端的AT指令,只支持收发文本,不支持彩信。只要把这两个搞定啦,利用短信做什么,就由我们定啦,比如在程序里,解释短信内容启动或关闭某一程序,收取系统监控信息等。我们小组就利用这个开发包,开发了短信事务平台,功能简介:一台服务器连上GSM Modem,N个客户端用TCP协议连上服务器,客户可以单/群收发短信,添加事务到数据库,按事务设定时间,自动发短信到客户手机,提示事务,还可以通过手机远程管理事务。
jSMSEngine1.2.6开发包,笔者在Nokia、三星、GSM Modem,JDK 1.5,JDK 1.5.0 ,在Eclipse5、测试通过。