Перейти к содержанию
Fire Monkey от А до Я

tetronis

Пользователи
  • Постов

    8
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные tetronis

  1. В 22.04.2019 в 22:02, Tarik Live сказал:

    Т.к TDM.AndroidServiceStartCommand может срабатывать несколько раз я ввел   переменную running, чтобы по нескольку раз не стартовал сам mqtt клиент. По вопросу автоматического переподключения я пока не разбирался, нужно чуток больше свободного времени, но есть пару идей. Как протестирую отпишусь. И да, таймер и все что обращается к "форме" в сервисах не работает :(

    С таймером разобрался, использую AndroidTimerSetInterval, сделал отсылку на брокер каждые 10 сек данные, но столкнулся с проблемой, сервис через время убивается, шлется какое-то время данные, а потом все, убивается и приложение и сервис...хоть и указано START_STICKY.

    А вы как-то реализовывали отсылку из приложения через сервис и обратно, данные MQTT?

  2. 17 часов назад, Tarik Live сказал:

    Думаю у вашем случае будет полезно. Просто поставьте проверку значения данной функции

    mqtt.JPG

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

    Но про подключение я имел ввиду, что когда гаснет экран телефона/планшета, устройство выключает WiFi, и соответственно сервис отключается от MQTT брокера, а значит это нужно отлавливать и переподключаться.

    Не совсем понятен этот код

    if running = False then TTask.Run(MqttMonitor);

    Сам running нигде не меняет значение, кроме TDM.MqttMonitor; (running:=True;), а при каких условиях выставляется false?

  3. В 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 и видимо происходит отключение, сообщения не приходят.

  4. В 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);

     

×
×
  • Создать...