SMSLib отправляет сообщение, используя несколько шлюзов

Я использую SMSLib для отправки и получения сообщений. Все отлично работает, но теперь я хотел бы подключить более одного модема. Я хочу получать сообщения от всех своих модемов и что-то с ними делать (думаю, я могу это сделать). Я тоже хочу отправлять сообщения, но только через выбранный модем (там моя проблема). Пока у меня не было одного шлюза, я отправлял так:

OutboundMessage msg = new OutboundMessage(recipientNumber, text);
Service.getInstance().sendMessage(msg);

Но теперь, как я могу выбрать один конкретный шлюз, который я хочу использовать для отправки своего сообщения?

Я нашел тему с проблемой, немного похожей на мою, но не совсем: Использовать несколько шлюзов с SMSLIB< /а>


person Radziasss    schedule 04.03.2016    source источник


Ответы (3)


Каждый модем является объектом AGatway в SMSLib, поэтому его необходимо сначала настроить:

SerialModemGateway modemGateway = new  SerialModemGateway("FirstGateway", "/dev/ttyM0", "9600", "WAVECOM", "Fastrack");
Service.getInstance().addGateway(modemGateway);

Где FirstGateway — идентификатор вашего модема, который в SMSLib называется gatewayId. Все, что вам нужно сделать сейчас, это передать свой gatewayId методу sendMessage или queueMessage (если вы отправляете сообщения асинхронно):

OutboundMessage msg = new OutboundMessage(recipientNumber, text);
Service.getInstance().sendMessage(msg, "FirstGateway");

or:

OutboundMessage msg = new OutboundMessage(recipientNumber, text);
msg.setGatewayId("FirstGateway");
Service.getInstance().sendMessage(msg);
person Lukasz    schedule 09.03.2016

Я не заметил, что есть такой метод sendMessage(), который принимает gatewayId в качестве второго аргумента. Если да, то будет идеально. Я проверю это завтра, вы уверены в этом? Я использую SmsLib 3.x

ИЗМЕНИТЬ:

Все именно так, как вы сказали. Я просто указал gatewayId в качестве второго аргумента, и он работает. Другой вариант заключается в том, что вы можете установить gatewayId созданного OutboundMessage:

OutboundMessage msg = new OutboundMessage(recipientNumber, text);
msg.setGatewayId("FirstGateway");
Service.getInstance().sendMessage(msg);

Так просто.. Спасибо!

person Radziasss    schedule 11.03.2016

Я бы не стал использовать метод sendMessage с несколькими шлюзами, используйте queueMessage, он добавит ваше сообщение в очередь службы SMSLib и отправляет его асинхронно.

Кроме того, если вы начинаете свое приложение с:

-Dsmslib.queuedir=yourQueuedMessagesDirectory

вы сможете хранить все неотправленные сообщения на жестком диске и предоставить сервису SMSLib возможность отправлять их после перезапуска приложения.

person Lukasz    schedule 14.03.2016
comment
Я никогда не использовал queueMessage, но я проверю, как это работает. Я планирую поместить исходящие сообщения в таблицу базы данных, запустить задачу, например, раз в минуту, отправить их и изменить их статус, если они были отправлены правильно. И есть место для использования queueMessage и IOutboundMessageNotification, которые я не смогу использовать при отправке через sendMessage. Прохладный ! :-) - person Radziasss; 15.03.2016