复制代码代码如下:
导入java.util.ArrayList;
导入java.util.List;
导入 org.apache.log4j.Logger;
导入 org.smslib.ICallNotification;
导入 org.smslib.IInboundMessageNotification;
导入 org.smslib.IOutboundMessageNotification;
导入 org.smslib.InboundMessage;
导入 org.smslib.InboundMessage.MessageClasses;
导入 org.smslib.Library;
导入 org.smslib.Message.MessageEncodings;
导入 org.smslib.Message.MessageTypes;
导入 org.smslib.OutboundMessage;
导入 org.smslib.Service;
导入 org.smslib.modem.SerialModemGateway;
/**
* @作者特里
*
*/
公共类 SmsModem {
// 短信网关
私有 SerialModemGateway 网关 = null;
java.util.ResourceBundle rb = null;//ResourceBundle.getBundle("SMS");
静态 SmsModem smsModem = null;
OutboundNotification outboundNotification = new OutboundNotification();
私有静态最终 Logger LOG = Logger.getLogger(SmsModem.class);
服务srv;
InboundNotification inboundNotification = new InboundNotification();
// 创建语音入站通知回调方法。
CallNotification callNotification = new CallNotification();
公共 SmsModem() {
尝试 {
//ReadMessages rm = new ReadMessages();
//rm.doIt();
rb = ResourceBundle.getBundle("sms");
字符串端口名称=“COM10”;
国际端口= 9600;
LOG.info("默认端口名称:" + 端口名称);
LOG.info("默认端口:" + 端口);
如果(rb!=空)
{
LOG.info("RB不为空");
if(rb.getString("smsport") != null && !"".equals(rb.getString("smsport")))
{
portName = rb.getString("smsport");
LOG.info("端口名称:" + 端口名称);
}
if(rb.getString("smsbolv") != null && !"".equals(rb.getString("smsbolv")))
{
端口 = Integer.valueOf(rb.getString("smsbolv"));
LOG.info("端口:" + 端口);
}
}
// 初始化短信网关
gateway = new SerialModemGateway("调制解调器。" + 端口名称, 端口名称, 端口,
“wavecom”,“17254”);
} catch (异常 e) {
LOG.error("网关初始化失败:" + e.getMessage());
e.printStackTrace();
}
}
公共静态 SmsModem getInstant() {
如果(smsModem == null){
smsModem = 新 SmsModem();
}
返回短信调制解调器;
}
公共 SerialModemGateway getGateway() {
返回网关;
}
公共无效sendMessage(字符串电话,字符串内容)抛出异常{
doIt(电话,内容);
}
/**
* 发送短信
* @参数电话
* @参数内容
* @抛出异常
*/
公共无效doIt(字符串电话,字符串内容)抛出异常{
OutboundMessage 消息;
LOG.info("发送示例:从串行 gsm 调制解调器发送消息。");
LOG.info(Library.getLibraryDescription());
LOG.info("发送版本:" + Library.getLibraryVersion());
如果(srv == null){
srv = 新服务();
srv.S.SERIAL_POLLING = true;
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setSimPin("0000");
gateway.setOutboundNotification(outboundNotification);
gateway.setInboundNotification(inboundNotification);
gateway.setCallNotification(callNotification);
srv.addGateway(网关);
srv.startService();
}
if (网关!= null) {
LOG.info("发送调制解调器信息:");
LOG.info("发送的制造商:" + gateway.getManufacturer());
LOG.info("发送的模型:" + gateway.getModel());
LOG.info("发送序列号:" + gateway.getSerialNo());
LOG.info("发送的 SIM IMSI: " + gateway.getImsi());
LOG.info("发送信号电平:" + gateway.getSignalLevel() + "%");
LOG.info("发送的电池电量:" + gateway.getBatteryLevel() + "%");
}
// 同步发送消息。
msg = new OutboundMessage(电话, 内容);
msg.setEncoding(MessageEncodings.ENCUCS2);//这句话是发中文短信必须的
srv.sendMessage(msg);
}
/**
* 发送消息类
* @作者特里
*
*/
公共类 OutboundNotification 实现 IOutboundMessageNotification {
公共无效过程(字符串gatewayId,OutboundMessage消息){
LOG.info("从网关调用的发送出站处理程序:" + gatewayId);
LOG.info(消息);
}
}
//接收消息类
公共字符串 readMessage()
{
StringBuffer sb = new StringBuffer("");
List<InboundMessage> msgList;
// 创建入站和状态报告的通知回调方法
// 消息。
尝试
{
System.out.println("读取示例:从串行 gsm 调制解调器读取消息。");
System.out.println(Library.getLibraryDescription());
System.out.println("读取版本:" + Library.getLibraryVersion());
// 创建新的 Service 对象 - 所有服务的父对象和主界面
// 给你。
如果(srv == null){
srv = 新服务();
srv.S.SERIAL_POLLING = true;
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setSimPin("0000");
gateway.setOutboundNotification(outboundNotification);
gateway.setInboundNotification(inboundNotification);
gateway.setCallNotification(callNotification);
srv.addGateway(网关);
srv.startService();
}
// 同样,你可以定义任意多个 Gateway 对象,代表
// 各种 GSM 调制解调器,将它们添加到服务对象中并控制它们。
//
// 开始! (即连接到所有定义的网关)
LOG.info("读取调制解调器信息:");
LOG.info("读取制造商:" + gateway.getManufacturer());
LOG.info("读取模型:" + gateway.getModel());
LOG.info("读取序列号:" + gateway.getSerialNo());
LOG.info("读取SIM卡IMSI: " + gateway.getImsi());
LOG.info("读取信号电平:" + gateway.getSignalLevel() + "%");
LOG.info("读取电池电量:" + gateway.getBatteryLevel() + "%");
// 读取消息。读取是通过服务对象完成的
// 影响所有定义的网关对象。这也可以更针对特定的
// 网关 - 查看 JavaDocs 以获取有关服务方法调用的信息。
msgList = new ArrayList<InboundMessage>();
this.srv.readMessages(msgList, MessageClasses.ALL);
整数数 = 1;
for (InboundMessage 消息:消息列表)
{
sb.append("第" + num + "条;发件人:"+msg.getOriginator() + ";内容:" + msg.getText() + "/n");
//sb.append(msg.toString() + "/n");
LOG.info("第" + num + "条;发件人:"+msg.getOriginator() + ";内容:" + msg.getText() + "/n");
数++;
LOG.info(消息);
}
// 现在睡觉。模拟现实世界的情况并给通知机会
// 收到消息或语音呼叫时调用的方法。
//System.out.println("正在睡眠 - 按 <enter> 终止。");
//System.in.read();
}
捕获(异常 e)
{
sb.append(e.getMessage());
e.printStackTrace();
}
最后
{
//this.srv.stopService();
}
返回 sb.toString();
}
公共类 InboundNotification 实现 IInboundMessageNotification
{
公共无效流程(字符串gatewayId,MessageTypes msgType,InboundMessage msg)
{
if (msgType == MessageTypes.INBOUND) System.out.println(">>> 从网关检测到新的入站消息:" + gatewayId);
else if (msgType == MessageTypes.STATUSREPORT) System.out.println(">>> 从网关检测到新的入站状态报告消息:" + gatewayId);
System.out.println(msg);
尝试
{
// 如果您希望在消息到达时删除消息,请取消注释以下行。
// srv.deleteMessage(msg);
}
捕获(异常 e)
{
System.out.println("哎呀!!!出了什么问题......");
e.printStackTrace();
}
}
}
公共类 CallNotification 实现 ICallNotification
{
公共无效流程(字符串gatewayId,字符串callerId)
{
System.out.println(">>> 从网关检测到新呼叫: " + gatewayId + " : " + callerId);
}
}
}