1. 连接:短信猫有usb和串口两种。usb直接插入电脑;串口的可以使用usb和串口转接线,电脑支持串口最好。尝试过电视机的投影线,虽然可以装上,但指示灯不良
2. 安装串口驱动:连接上电脑后可用驱动精灵等软件下载
3. 编写实现代码。设备管理器中查找信息:端口(COM开头),波特率(属性-端口设置-位/秒),和制造商(短信猫机身上有),pin(移动默认0000,联通默认1234)
package com.dsg.monitor.service.mon;
import java.io.IOException;
import org.smslib.AGateway.Protocols;
import org.smslib.GatewayException;
import org.smslib.Message.MessageEncodings;
import org.smslib.OutboundMessage;
import org.smslib.SMSLibException;
import org.smslib.Service;
import org.smslib.TimeoutException;
import org.smslib.modem.SerialModemGateway;
import com.dsg.monitor.dao.ParameterDao;
public class SmsService {
public static String portName ;
public static int baudrate ;
public static String manufacturer ;
public static Service smsService = Service.getInstance();
public static Service getSmsService() {
return smsService;
}
public static void setSmsService(Service smsService) {
SmsService.smsService = smsService;
}
static {
// 设备参数 baudrate manufacturer
portName = ParameterDao.getInstance().getParameterByName("sms_com_prot").getValue();
baudrate = Integer.valueOf(ParameterDao.getInstance().getParameterByName("sms_baudrate").getValue());
manufacturer = ParameterDao.getInstance().getParameterByName("sms_manufacturer").getValue();
SerialModemGateway gateway = new SerialModemGateway("modem." + portName.toLowerCase(), portName, baudrate, manufacturer, "");
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setProtocol(Protocols.PDU);
gateway.setSimPin("1234");
try {
smsService.addGateway(gateway);
try {
smsService.startService();
} catch (TimeoutException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SMSLibException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (GatewayException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void resetConfig(){
portName = ParameterDao.getInstance().getParameterByName("sms_com_prot").getValue();
baudrate = Integer.valueOf(ParameterDao.getInstance().getParameterByName("sms_baudrate").getValue());
manufacturer = ParameterDao.getInstance().getParameterByName("sms_manufacturer").getValue();
}
public static void sendMsgs(String[] tels){
try {
/*smsService.startService();*/
String msg = "information for testing";
for (int i = 0; i < tels.length; i++) {
OutboundMessage outboundMessage = new OutboundMessage(tels[i], msg);
outboundMessage.setEncoding(MessageEncodings.ENCUCS2);
if (!smsService.sendMessage(outboundMessage)) {
System.out.println( "Send failed");
}
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally{
try {
smsService.stopService();
} catch (TimeoutException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (GatewayException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SMSLibException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4. 注意短信猫上有支持的网络制式,购卡时注意
5. 指示灯闪烁正常,一直亮着有异常:有的需要另外装天线
两个异常解决:
GSM Network Registration failed, give up trying