短信 猫开发模块使用了rxtx 和 smslib 这两种开源代码
Rxtx是用于comm端口调用
Smslib是在rxtx的基础上,调用短信_猫,使用AT指令来进行短信的发送接收等操作。
注意:
每次系统重启或者插拔短信_猫后,都要设置拥有者
chown dgsun /dev/ttyUSB0 (root 权限运行,dgsun是用户)
设置完后,使用minicom 看看该用户是否有权限使用该端口
1,配置RXTX
配置主要配置两个文件
一个是 Windows的dll文件<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:79.5pt; height:36.75pt'> <v:imagedata src="file:///C:\Users\chenmj\AppData\Local\Temp\msohtmlclip1\01\clip_image001.wmz" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--> linux下的.so <!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:90.75pt;height:36.75pt'> <v:imagedata src="file:///C:\Users\chenmj\AppData\Local\Temp\msohtmlclip1\01\clip_image003.wmz" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
另一个是 <!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75" style='width:68.25pt;height:36.75pt'> <v:imagedata src="file:///C:\Users\chenmj\AppData\Local\Temp\msohtmlclip1\01\clip_image005.wmz" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
1.1 windows
rxtx-2.2pre2-bins\win32目录下的 rxtxSerial.dll
将rxtxSerial.dll复制到 JAVA_HOME\bin目录下
将RXTXcomm.jar复制到 JAVA_HOME\jre\lib\ext目录下
如果使用myeclipse开发则需要修改myeclipse使用的jdk。
Myeclipse自带一个jdk,要改为JAVA_HOME下的jdk
<!--[if gte vml 1]><v:shape id="_x0000_i1028" type="#_x0000_t75" style='width:234pt;height:180.75pt'> <v:imagedata src="file:///C:\Users\chenmj\AppData\Local\Temp\msohtmlclip1\01\clip_image007.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
1.2 linux
由于使用的是centos 64位系统,所以
复制rxtx-2.2pre2-bins\x86_64-unknown-linux-gnu目录下的librxtxSerial.so
将librxtxSerial.so复制到 JAVA_HOME/jre/lib/amd64中
将RXTXcomm.jar复制到 JAVA_HOME/jre/lib/ext目录下
这个目录有可能各不相同
http://blog.csdn.net/iamfafa/article/details/6340057
如果找不到librxtxSerial.so则会报错
java.lang.UnsatisfiedLinkError: no XXX in java.library.path
这个时候可以写一段代码来查看java.library.path的位置
System.out.println( System.getProperty("java.library.path"));
在打印出的位置中加入librxtxSerial.so即可
2 配置SMSLIB
将smslib目录下的jar包加入到项目中
<!--[if gte vml 1]><v:shape id="_x0000_i1029" type="#_x0000_t75" style='width:117.75pt;height:69.75pt'> <v:imagedata src="file:///C:\Users\chenmj\AppData\Local\Temp\msohtmlclip1\01\clip_image009.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
3 发送短信
接下来就是在代码中使用smslib调用短信 猫发送短信
代码可见src目录下 SmsMain.java 和 sms.properties
sms.properties配置了短信 猫的参数。 在windows下和在linux下是不同的,
我测试的时候windows下使用的是com5端口,这个可以再设备管理器中查看到;
在linux下使用的是 /dev/ttyUSB0,这个我是使用minicom一个一个在/dev/下找的
<!--[if gte vml 1]><v:shape id="_x0000_i1030" type="#_x0000_t75" style='width:189pt;height:132.75pt'> <v:imagedata src="file:///C:\Users\chenmj\AppData\Local\Temp\msohtmlclip1\01\clip_image011.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
<!--[if gte vml 1]><v:shape id="_x0000_i1031" type="#_x0000_t75" style='width:304.5pt;height:141.75pt'> <v:imagedata src="file:///C:\Users\chenmj\AppData\Local\Temp\msohtmlclip1\01\clip_image013.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
很奇怪,我使用的是wavecom模块的短信 猫,在插入移动卡的时候,manufacutrer设置了wavecom ,发送短信一切正常。当我换了一张联通的gsm卡的时候,就无法发短信了,只有不填,调用默认驱动才可以发短信。所以该处都默认为不填。
需要发短信的时候只要调用 SmsMain的sendSms方法
static boolean sendSms(String mobile, String content)
4 附录
Minicom使用
首先 minicom –s 对minicom 进行配置,相关配置可以再网上查找介绍
主要是修改 Serial port setup, 修改完后save setup as dfl进行保存。
Exit 后,如果配置短信 猫正确的话,就可以进入到 指令行了
输入AT,回车,页面打印OK
如果ATD133*******; 就可以对该电话号码进行拨号。 注意结尾的分号不可少。