复制代码代码如下:
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
*
*/
clase pública SmsModem {
// 短信网关
puerta de enlace privada SerialModemGateway = nulo;
java.util.ResourceBundle rb = null;//ResourceBundle.getBundle("SMS");
SMSModem estático smsModem = nulo;
OutboundNotification outboundNotification = nueva OutboundNotification();
Registrador final estático privado LOG = Logger.getLogger(SmsModem.class);
servicio de servicio;
InboundNotification inboundNotification = nueva InboundNotification();
// Crea el método de devolución de llamada de notificación para llamadas de voz entrantes.
CallNotification callNotification = nueva CallNotification();
Módem SMS público() {
intentar {
//ReadMessages rm = new ReadMessages();
//rm.hacerlo();
rb = ResourceBundle.getBundle("sms");
Cadena nombre de puerto = "COM10";
puerto int = 9600;
LOG.info ("nombre de puerto predeterminado:" + nombre de puerto);
LOG.info("puerto predeterminado:" + puerto);
si (rb! = nulo)
{
LOG.info("RB no es nulo");
if(rb.getString("smsport") != null && !"".equals(rb.getString("smsport")))
{
nombreDePuerto = rb.getString("smsport");
LOG.info("nombrePuerto:" + nombrePuerto);
}
if(rb.getString("smsbolv") != null && !"".equals(rb.getString("smsbolv")))
{
puerto = Integer.valueOf(rb.getString("smsbolv"));
LOG.info("puerto:" + puerto);
}
}
// 初始化短信网关
puerta de enlace = new SerialModemGateway("módem." + nombredepuerto, nombredepuerto, puerto,
"wavecom", "17254");
} captura (Excepción e) {
LOG.error("网关初始化失败:" + e.getMessage());
e.printStackTrace();
}
}
getInstant público estático SmsModem() {
si (smsModem == nulo) {
SMSModem = nuevo SMSModem();
}
devolver SMSModem;
}
puerta de enlace SerialModem pública getGateway() {
puerta de retorno;
}
public void sendMessage (teléfono de cadena, contenido de cadena) lanza una excepción {
hazlo(teléfono, contenido);
}
/**
* 发送短信
* @param teléfono
* @param contenido
* @throws Excepción
*/
public void doIt (teléfono de cadena, contenido de cadena) lanza una excepción {
Mensaje de mensaje saliente;
LOG.info("Ejemplo enviado: enviar mensaje desde un módem gsm serie.");
LOG.info(Library.getLibraryDescription());
LOG.info("Versión enviada: " + Library.getLibraryVersion());
si (srv == nulo) {
srv = nuevo Servicio();
srv.S.SERIAL_POLLING = verdadero;
puerta de enlace.setInbound (verdadero);
gateway.setOutbound(verdadero);
puerta de enlace.setSimPin("0000");
gateway.setOutboundNotification(notificación saliente);
gateway.setInboundNotification (notificación entrante);
gateway.setCallNotification(llamadaNotificación);
srv.addGateway(puerta de enlace);
srv.startService();
}
si (puerta de enlace! = nulo) {
LOG.info("Información del módem enviado:");
LOG.info("Fabricante enviado: " + gateway.getManufacturer());
LOG.info("Modelo enviado: " + gateway.getModel());
LOG.info("Nº de serie enviado: " + gateway.getSerialNo());
LOG.info("SIM IMSI enviada: " + gateway.getImsi());
LOG.info("Nivel de señal enviada: " + gateway.getSignalLevel() + "%");
LOG.info("Nivel de batería enviado: " + gateway.getBatteryLevel() + "%");
}
// Enviar un mensaje de forma sincrónica.
msg = nuevo mensaje saliente (teléfono, contenido);
msg.setEncoding(MessageEncodings.ENCUCS2);// 这句话是发中文短信必须的
srv.sendMessage(msg);
}
/**
* 发送消息类
* @autor terry
*
*/
la clase pública OutboundNotification implementa IOutboundMessageNotification {
proceso de anulación pública (String gatewayId, mensaje de mensaje de salida) {
LOG.info("Manejador de salida enviado llamado desde la puerta de enlace: " + gatewayId);
LOG.info(mensaje);
}
}
//接收消息类
cadena pública leerMensaje()
{
StringBuffer sb = nuevo StringBuffer("");
Lista<MensajeEntrante> msgList;
// Crea el método de devolución de llamada de notificación para el informe entrante y de estado
// mensajes.
intentar
{
System.out.println("Ejemplo de lectura: leer mensajes desde un módem GSM en serie.");
System.out.println(Library.getLibraryDescription());
System.out.println("Versión de lectura: " + Library.getLibraryVersion());
// Crea un nuevo objeto de Servicio: el padre de todos y la interfaz principal
// A usted.
si (srv == nulo) {
srv = nuevo Servicio();
srv.S.SERIAL_POLLING = verdadero;
puerta de enlace.setInbound (verdadero);
gateway.setOutbound(verdadero);
puerta de enlace.setSimPin("0000");
gateway.setOutboundNotification(notificación saliente);
gateway.setInboundNotification (notificación entrante);
gateway.setCallNotification(llamadaNotificación);
srv.addGateway(puerta de enlace);
srv.startService();
}
// De manera similar, puedes definir tantos objetos Gateway, que representen
// varios módems GSM, agregarlos al objeto Servicio y controlarlos todos.
//
// ¡Comenzar! (es decir, conectarse a todas las puertas de enlace definidas)
LOG.info("Leer información del módem:");
LOG.info("Leer Fabricante: " + gateway.getManufacturer());
LOG.info("Leer modelo: " + gateway.getModel());
LOG.info("Leer número de serie: " + gateway.getSerialNo());
LOG.info("Leer SIM IMSI: " + gateway.getImsi());
LOG.info("Leer nivel de señal: " + gateway.getSignalLevel() + "%");
LOG.info("Leer nivel de batería: " + gateway.getBatteryLevel() + "%");
// Leer mensajes. La lectura se realiza a través del objeto Servicio y
// afecta a todos los objetos Gateway definidos. Esto también puede estar más dirigido a un tema específico.
// Puerta de enlace: busque en JavaDocs información sobre las llamadas al método de servicio.
msgList = nueva ArrayList<InboundMessage>();
this.srv.readMessages(msgList, MessageClasses.ALL);
número int = 1;
para (mensaje de mensaje entrante: lista de mensajes)
{
sb.append("第" + num + "条;发件人:"+msg.getOriginator() + ";内容:" + msg.getText() + "/n");
//sb.append(msg.toString() + "/n");
LOG.info("第" + num + "条;发件人:"+msg.getOriginator() + ";内容:" + msg.getText() + "/n");
número++;
LOG.info(mensaje);
}
// Duerme ahora. Emula situaciones del mundo real y dale una oportunidad a las notificaciones.
// métodos a llamar en caso de recepción de mensaje o llamada de voz.
//System.out.println("Ahora durmiendo: presione <enter> para finalizar.");
//System.in.read();
}
captura (Excepción e)
{
sb.append(e.getMessage());
e.printStackTrace();
}
finalmente
{
//this.srv.stopService();
}
devolver sb.toString();
}
la clase pública InboundNotification implementa IInboundMessageNotification
{
proceso de anulación pública (String gatewayId, MessageTypes msgType, InboundMessage msg)
{
if (msgType == MessageTypes.INBOUND) System.out.println(">>> Nuevo mensaje entrante detectado desde Gateway: " + gatewayId);
else if (msgType == MessageTypes.STATUSREPORT) System.out.println(">>> Nuevo mensaje de informe de estado entrante detectado desde la puerta de enlace: " + gatewayId);
System.out.println(msg);
intentar
{
// Descomente la siguiente línea si desea eliminar el mensaje al llegar.
// srv.deleteMessage(msg);
}
captura (Excepción e)
{
System.out.println("¡¡Ups!!! Algo salió mal...");
e.printStackTrace();
}
}
}
La clase pública CallNotification implementa ICallNotification
{
proceso de anulación pública (String gatewayId, String callerId)
{
System.out.println(">>> Nueva llamada detectada desde Gateway: " + gatewayId + " : " + callerId);
}
}
}