复制代码代码如下:
importar java.util.ArrayList;
importar java.util.List;
importar org.apache.log4j.Logger;
importar org.smslib.ICallNotification;
importar org.smslib.IInboundMessageNotification;
importar org.smslib.IOutboundMessageNotification;
importar org.smslib.InboundMessage;
importar org.smslib.InboundMessage.MessageClasses;
importar org.smslib.Library;
importar org.smslib.Message.MessageEncodings;
importar org.smslib.Message.MessageTypes;
importar org.smslib.OutboundMessage;
importar org.smslib.Service;
importar org.smslib.modem.SerialModemGateway;
/**
* @autor terry
*
*/
classe pública SmsModem {
// 短信网关
gateway SerialModemGateway privado = null;
java.util.ResourceBundle rb = null;//ResourceBundle.getBundle("SMS");
SmsModem estático smsModem = null;
OutboundNotification outboundNotification = new OutboundNotification();
final estático privado Logger LOG = Logger.getLogger (SmsModem.class);
Serviço Srv;
InboundNotification inboundNotification = new InboundNotification();
// Cria o método de retorno de chamada de notificação para chamadas de voz recebidas.
CallNotification callNotification = new CallNotification();
public SMSModem() {
tentar {
//ReadMessages rm = new ReadMessages();
//rm.doIt();
rb = ResourceBundle.getBundle("sms");
String portName= "COM10";
porta interna = 9600;
LOG.info("nome da porta padrão:" + nome da porta);
LOG.info("porta padrão:" + porta);
if (rb! = nulo)
{
LOG.info("RB não é nulo");
if(rb.getString("smsport") != null && !"".equals(rb.getString("smsport")))
{
portName = rb.getString("smsport");
LOG.info("nomedaporta:" + nomedaporta);
}
if(rb.getString("smsbolv") != null && !"".equals(rb.getString("smsbolv")))
{
porta = Integer.valueOf(rb.getString("smsbolv"));
LOG.info("porta:" + porta);
}
}
// 初始化短信网关
gateway = new SerialModemGateway("modem." + portName, portName, porta,
"wavecom", "17254");
} catch (Exceção e) {
LOG.error("网关初始化失败:" + e.getMessage());
e.printStackTrace();
}
}
public static SmsModem getInstant() {
if (smsModem == null) {
smsModem = new SmsModem();
}
retornar smsModem;
}
public SerialModemGateway getGateway() {
porta de retorno;
}
public void sendMessage(String telefone, String conteúdo) lança exceção {
doIt(telefone, conteúdo);
}
/**
* 发送短信
* @param telefone
* @param conteúdo
* @throws Exceção
*/
public void doIt(String telefone, String conteúdo) lança exceção {
Mensagem de saída;
LOG.info("Exemplo enviado: Enviar mensagem de um modem serial GSM.");
LOG.info(Library.getLibraryDescription());
LOG.info("Versão enviada: " + Library.getLibraryVersion());
if (srv == nulo) {
srv = novo serviço();
srv.S.SERIAL_POLLING = verdadeiro;
gateway.setInbound (verdadeiro);
gateway.setOutbound (verdadeiro);
gateway.setSimPin("0000");
gateway.setOutboundNotification(outboundNotification);
gateway.setInboundNotification(inboundNotification);
gateway.setCallNotification(callNotification);
srv.addGateway(gateway);
srv.startService();
}
if (gateway! = nulo) {
LOG.info("Informações do modem enviadas:");
LOG.info("Fabricante Enviado: " + gateway.getManufacturer());
LOG.info("Modelo Enviado: " + gateway.getModel());
LOG.info("Número de série enviado: " + gateway.getSerialNo());
LOG.info("IMSI SIM enviado: " + gateway.getImsi());
LOG.info("Nível de sinal enviado: " + gateway.getSignalLevel() + "%");
LOG.info("Nível de bateria enviado: " + gateway.getBatteryLevel() + "%");
}
//Envia uma mensagem de forma síncrona.
mensagem = new OutboundMessage(telefone, conteúdo);
msg.setEncoding(MessageEncodings.ENCUCS2);// 这句话是发中文短信必须的
srv.sendMessage(mensagem);
}
/**
* 发送消息类
* @autor terry
*
*/
A classe pública OutboundNotification implementa IOutboundMessageNotification {
processo público void (String gatewayId, mensagem OutboundMessage) {
LOG.info("Manipulador de saída enviado chamado do Gateway: " + gatewayId);
LOG.info(mensagem);
}
}
//接收消息类
string pública readMessage()
{
StringBuffer sb = new StringBuffer("");
List<InboundMessage>msgList;
// Cria o método de retorno de chamada de notificação para Relatório de entrada e status
// mensagens.
tentar
{
System.out.println("Exemplo de leitura: Ler mensagens de um modem serial GSM.");
System.out.println(Library.getLibraryDescription());
System.out.println("Versão de leitura: " + Library.getLibraryVersion());
// Cria um novo objeto Service - o pai de todos e a interface principal
// para você.
if (srv == nulo) {
srv = novo serviço();
srv.S.SERIAL_POLLING = verdadeiro;
gateway.setInbound (verdadeiro);
gateway.setOutbound (verdadeiro);
gateway.setSimPin("0000");
gateway.setOutboundNotification(outboundNotification);
gateway.setInboundNotification(inboundNotification);
gateway.setCallNotification(callNotification);
srv.addGateway(gateway);
srv.startService();
}
// Da mesma forma, você pode definir quantos objetos Gateway, representando
// vários modems GSM, adicione-os no objeto Service e controle todos eles.
//
// Começar! (ou seja, conectar-se a todos os gateways definidos)
LOG.info("Ler informações do modem:");
LOG.info("Ler Fabricante: " + gateway.getManufacturer());
LOG.info("Ler Modelo: " + gateway.getModel());
LOG.info("Ler o número de série: " + gateway.getSerialNo());
LOG.info("Ler SIM IMSI: " + gateway.getImsi());
LOG.info("Nível de sinal de leitura: " + gateway.getSignalLevel() + "%");
LOG.info("Leia o nível da bateria: " + gateway.getBatteryLevel() + "%");
// Ler mensagens. A leitura é feita através do objeto Service e
// afeta todos os objetos Gateway definidos. Isso também pode ser mais direcionado a um determinado
// Gateway - procure nos JavaDocs informações sobre as chamadas do método Service.
Listamsg = new ArrayList<InboundMessage>();
this.srv.readMessages(msgList, MessageClasses.ALL);
int num = 1;
para (mensagem de mensagem de entrada: lista de mensagens)
{
sb.append("第" + num + "条;发件人:"+msg.getOriginator() + ";内容:" + msg.getText() + "/n");
//sb.append(msg.toString() + "/n");
LOG.info("第" + num + "条;发件人:"+msg.getOriginator() + ";内容:" + msg.getText() + "/n");
num++;
LOG.info(mensagem);
}
// Durma agora. Emule a situação do mundo real e dê uma chance às notificações
// métodos a serem chamados em caso de recepção de mensagem ou chamada de voz.
//System.out.println("Agora dormindo - pressione <enter> para encerrar.");
//System.in.read();
}
pegar (Exceção e)
{
sb.append(e.getMessage());
e.printStackTrace();
}
finalmente
{
//this.srv.stopService();
}
retornar sb.toString();
}
classe pública InboundNotification implementa IInboundMessageNotification
{
processo público vazio (String gatewayId, MessageTypes msgType, InboundMessage msg)
{
if (msgType == MessageTypes.INBOUND) System.out.println(">>> Nova mensagem de entrada detectada no Gateway: " + gatewayId);
else if (msgType == MessageTypes.STATUSREPORT) System.out.println(">>> Nova mensagem de relatório de status de entrada detectada no gateway: " + gatewayId);
System.out.println(msg);
tentar
{
// Remova o comentário da linha seguinte se desejar excluir a mensagem na chegada.
// srv.deleteMessage(msg);
}
pegar (Exceção e)
{
System.out.println("Opa!!! Algo deu errado...");
e.printStackTrace();
}
}
}
classe pública CallNotification implementa ICallNotification
{
processo público vazio (String gatewayId, String callerId)
{
System.out.println(">>> Nova chamada detectada no Gateway: " + gatewayId + " : " + callerId);
}
}
}