复制代码代码如下:
импортировать 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;
/**
* @author Терри
*
*/
общественный класс SmsModem {
// 短信网关
частный шлюз SerialModemGateway = null;
java.util.ResourceBundle rb = null; //ResourceBundle.getBundle("SMS");
статический SmsModem smsModem = null;
OutboundNotification outboundNotification = новый OutboundNotification ();
частный статический окончательный Logger LOG = Logger.getLogger(SmsModem.class);
Сервис срв;
InboundNotification inboundNotification = новый InboundNotification ();
// Создаем метод обратного вызова уведомлений для входящих голосовых вызовов.
CallNotification callNotification = новый CallNotification();
общественный SmsModem() {
пытаться {
//ReadMessages rm = новые ReadMessages();
//rm.doIt();
rb = ResourceBundle.getBundle("sms");
Строка portName = "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("порт:" + порт);
}
}
// 初始化短信网关
шлюз = новый SerialModemGateway("модем." + имя_порта, имя_порта, порт,
«Вэйвком», «17254»);
} catch (Исключение е) {
LOG.error("Подробнее об ошибке:" + e.getMessage());
е.printStackTrace();
}
}
общественный статический SmsModem getInstant() {
если (smsModem == ноль) {
smsModem = новый SmsModem();
}
вернуть смсмодем;
}
общественный SerialModemGateway getGateway () {
обратный шлюз;
}
public void sendMessage (String phone, String content) выдает исключение {
doIt(телефон, контент);
}
/**
* 发送短信
* @param телефон
* @param контент
* @throws Исключение
*/
public void doIt(String phone, String content) выдает исключение {
Исходящее сообщение;
LOG.info("Пример отправки: отправка сообщения с последовательного GSM-модема.");
LOG.info(Library.getLibraryDescription());
LOG.info("Отправленная версия: " + Library.getLibraryVersion());
если (СРВ == ноль) {
СРВ = новый Сервис ();
srv.S.SERIAL_POLLING = правда;
шлюз.setInbound(истина);
шлюз.setOutbound(истина);
шлюз.setSimPin("0000");
шлюз.setOutboundNotification(outboundNotification);
шлюз.setInboundNotification(inboundNotification);
шлюз.setCallNotification(callNotification);
srv.addGateway(шлюз);
srv.startService();
}
если (шлюз!= ноль) {
LOG.info("Отправленная информация о модеме:");
LOG.info("Отправлено производителю: " + шлюз.getManufacturer());
LOG.info("Отправленная модель: " + шлюз.getModel());
LOG.info("Отправлен серийный номер: " + шлюз.getSerialNo());
LOG.info("Отправлен SIM-IMSI: " + шлюз.getImsi());
LOG.info("Уровень отправленного сигнала: " + шлюз.getSignalLevel() + "%");
LOG.info("Отправлен уровень заряда батареи: " + шлюз.getBatteryLevel() + "%");
}
// Отправляем сообщение синхронно.
msg = новое OutboundMessage (телефон, контент);
msg.setEncoding(MessageEncodings.ENCUCS2);// 这句话是发中文短信必须的
srv.sendMessage(msg);
}
/**
* 发送消息类
* @author Терри
*
*/
публичный класс OutboundNotification реализует IOutboundMessageNotification {
общественный недействительный процесс (StringgateId, OutboundMessage msg) {
LOG.info("Отправленный обработчик исходящих вызовов из шлюза: " + GatewayId);
LOG.info(сообщение);
}
}
// 接收消息类
публичная строка readMessage()
{
StringBuffer sb = новый StringBuffer("");
Список<InboundMessage> msgList;
// Создаем метод обратного вызова уведомлений для отчета о входящих сообщениях и статусе
// сообщения.
пытаться
{
System.out.println("Пример чтения: чтение сообщений от последовательного GSM-модема.");
System.out.println(Library.getLibraryDescription());
System.out.println("Читать версию: " + Library.getLibraryVersion());
// Создаём новый объект Service — родительский для всех и основной интерфейс
// тебе.
если (СРВ == ноль) {
СРВ = новый Сервис ();
srv.S.SERIAL_POLLING = правда;
шлюз.setInbound(истина);
шлюз.setOutbound(истина);
шлюз.setSimPin("0000");
шлюз.setOutboundNotification(outboundNotification);
шлюз.setInboundNotification(inboundNotification);
шлюз.setCallNotification(callNotification);
srv.addGateway(шлюз);
srv.startService();
}
// Аналогичным образом вы можете определить любое количество объектов Gateway, представляющих
// различные GSM-модемы, добавьте их в объект Сервис и управляйте ими всеми.
//
// Начинать! (т.е. подключиться ко всем определенным шлюзам)
LOG.info("Читать информацию о модеме:");
LOG.info("Читать производителя: " + шлюз.getManufacturer());
LOG.info("Читать модель: " + шлюз.getModel());
LOG.info("Читать серийный номер: " + шлюз.getSerialNo());
LOG.info("Читать IMSI SIM: " + шлюз.getImsi());
LOG.info("Чтение уровня сигнала: " + шлюз.getSignalLevel() + "%");
LOG.info("Читать уровень заряда батареи: " + шлюз.getBatteryLevel() + "%");
// Чтение сообщений. Чтение осуществляется через объект Service и
// влияет на все определенные объекты шлюза. Это также может быть более направлено на конкретный
// Шлюз — информацию о вызовах методов службы см. в документации JavaDocs.
msgList = новый ArrayList<InboundMessage>();
this.srv.readMessages(msgList, MessageClasses.ALL);
целое число = 1;
для (InboundMessage msg: msgList)
{
sb.append("第" + num + "条;发件人:"+msg.getOriginator() + ";内容:" + msg.getText() + "/n");
//sb.append(msg.toString() + "/n");
LOG.info("第" + num + "条;发件人:"+msg.getOriginator() + ";内容:" + msg.getText() + "/n");
число++;
ЖУРНАЛ.info(сообщение);
}
// Спи сейчас. Эмулируйте реальную ситуацию и дайте возможность уведомлениям
// методы, которые будут вызываться в случае получения сообщения или голосового вызова.
//System.out.println("Сейчас спящий режим — нажмите <enter>, чтобы завершить работу.");
//System.in.read();
}
поймать (Исключение e)
{
sb.append(e.getMessage());
е.printStackTrace();
}
окончательно
{
//this.srv.stopService();
}
вернуть sb.toString();
}
общедоступный класс InboundNotification реализует IInboundMessageNotification
{
общедоступный недействительный процесс (StringgateId, MessageTypes msgType, InboundMessage msg)
{
if (msgType == MessageTypes.INBOUND) System.out.println(">>> Новое входящее сообщение обнаружено со шлюза: " + GatewayId);
else if (msgType == MessageTypes.STATUSREPORT) System.out.println(">>> Новое входящее сообщение отчета о состоянии обнаружено на шлюзе: " + GatewayId);
System.out.println(мсг);
пытаться
{
// Раскомментируйте следующую строку, если хотите удалить сообщение по прибытии.
// srv.deleteMessage(msg);
}
поймать (Исключение e)
{
System.out.println("Упс!!! Что-то пошло не так...");
е.printStackTrace();
}
}
}
публичный класс CallNotification реализует ICallNotification
{
публичный недействительный процесс (StringgateId, String callerId)
{
System.out.println(">>> Обнаружен новый вызов со шлюза: " + GatewayId + " : " + callerId);
}
}
}