tetronis
-
Постов
8 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные tetronis
-
-
В 22.04.2019 в 22:02, Tarik Live сказал:
Т.к TDM.AndroidServiceStartCommand может срабатывать несколько раз я ввел переменную running, чтобы по нескольку раз не стартовал сам mqtt клиент. По вопросу автоматического переподключения я пока не разбирался, нужно чуток больше свободного времени, но есть пару идей. Как протестирую отпишусь. И да, таймер и все что обращается к "форме" в сервисах не работает
С таймером разобрался, использую AndroidTimerSetInterval, сделал отсылку на брокер каждые 10 сек данные, но столкнулся с проблемой, сервис через время убивается, шлется какое-то время данные, а потом все, убивается и приложение и сервис...хоть и указано START_STICKY.
А вы как-то реализовывали отсылку из приложения через сервис и обратно, данные MQTT?
-
17 часов назад, Tarik Live сказал:
Да, функции я смотрел и пробовал использовать, но безуспешно, все виснет при запуске. Вообще разные сборки ведут себя по разному, при отсутствии изменений в коде, что очень странно. Пробовал так же вставить таймер и по нему проверять, подключен ли клиент, но опять же, даже не стартует сервис с таймером(узнал что таймеры не работают в сервисах, так что этот вопрос попробую решить). Думал может вы какой-то код реализовали и обошли грабли.
Но про подключение я имел ввиду, что когда гаснет экран телефона/планшета, устройство выключает WiFi, и соответственно сервис отключается от MQTT брокера, а значит это нужно отлавливать и переподключаться.
Не совсем понятен этот код
if running = False then TTask.Run(MqttMonitor);
Сам running нигде не меняет значение, кроме TDM.MqttMonitor; (running:=True;), а при каких условиях выставляется false?
-
В 18.04.2019 в 22:20, Tarik Live сказал:
Подписка чуть больше, а так да все верно.
topicArray:=TJavaObjectArray<Jtopic>.Create(1); topic:=TJTopic.JavaClass.init(StringToJString('android/java/'), TJQoS.JavaClass.AT_LEAST_ONCE); topicArray.Items[0]:=topic; connection.subscribe(topicArray);
Очень рад, что у вас получилось)
Еще вопрос, а как вы реализовали отслеживание, если отключится от брокера? или будет переподключаться сам? но у меня так не происходит и через время телефон отрубает WiFi и видимо происходит отключение, сообщения не приходят.
-
Сори, разобрался, неправильно собирал приложение) все работает!
-
В 25.11.2018 в 18:35, Tarik Live сказал:
Вопрос закрыт. Удалось завести другую библиотеку
Пробовал сделать приложение с сервисом, в самом приложении MQTT работает, а вот сервис запускается и останавливается, но не работает с MQTT, ни отсылает на брокер ни принимает. Я правильно понимаю, этот код принимает сообщения и выдает сообщение MyNotification?
Procedure TDM.MqttMonitor; var MyNotification: TNotification; mess:Jclient_Message; Bytes: TJavaArray<Byte>; JS2: JString; begin running:=True; MyNotification := NotificationCenter1.CreateNotification; MyNotification.Title := 'Mqtt Service'; //заголовок while True do begin mess:=connection.receive; Bytes:=mess.getPayload; JS2:=TJString.JavaClass.init(bytes); MyNotification.AlertBody := (JStringToString(JS2));//текст MyNotification.EnableSound:=True; NotificationCenter1.PresentNotification(MyNotification); end; end;
А при создании сервиса подписка на топик, который будет мониторится, верно?
topic:=TJTopic.JavaClass.init(StringToJString('android'), TJQoS.JavaClass.AT_LEAST_ONCE);
-
40 минут назад, Tarik Live сказал:
Вот код моего сервиса
Спасибо!
-
В 25.11.2018 в 19:37, Tarik Live сказал:
https://github.com/fusesource/mqtt-client
без танцев с бубном не обошлось, но уже получилось подключится к серверуА можно ваш пример реализации приложения?
JobScheduler как использовать?
в Сервис(служба)
Опубликовано
Можно запрашивать разрешение на REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
А вообще по нормальному нужно работать уже с Doze. Советую посмотреть на бессплатную библиотеку Kasti, там есть хороший пример.