2015-01-25 3 views
7

Я пытаюсь использовать библиотеку MQTT от Paho Android (downloaded from here).
Образец «прикладное приложение» отлично работает, методы «подписки» и «публикации» отлично работают, когда приложение-образец работает.
Когда я его закрываю, устройство больше не получает уведомлений.
Есть ли у кого-нибудь опыт правильного изменения/внедрения службы для получения сообщения, даже если приложение не работает?Служба поддержки Paho MQTT Android пробуждает активность

Спасибо!

+1

Вы когда-нибудь могли решить свою проблему? Я сталкиваюсь с аналогичной проблемой, пытаясь сохранить работу службы даже после закрытия приложения. –

+1

Пока нет. К сожалению, я сейчас слишком занят (на работе), чтобы заниматься этим хобби, но я отправлю вам свое решение, если я смогу заставить его работать. – wyzard

+0

Я добился определенного прогресса. Я реализовал службу (START_STICKY), которая содержит методы MqttClient (и setCallback, connect, subscribe и т. Д.). Таким образом, я достиг, что мое приложение получает уведомления об обратном вызове, даже если моя активность не запущена. Прямо сейчас моя проблема: на устройствах Xiaomi я не могу реализовать функцию «запускать службу при загрузке», потому что MIUI имеет встроенный компонент безопасности, который его отрицает, но это еще одна проблема. – wyzard

ответ

1

Вы должны реализовать фон службы смотрите: http://developer.android.com/training/run-background-service/index.html

Или в зависимости от случая использования вы можете реализовать уведомления толчка на стороне сервера и получать их после того, как клиент не подписался на MQTT брокера.

+0

Благодарю вас, я попробую это. – wyzard

+0

См. Пример MQTT Paho Android Service здесь: http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.java.git/tree/org.eclipse.paho.android.service/org. eclipse.paho.android.service.sample – Teixi

3

Служба Mqtt как-то библиотека, чем общее обслуживание. Он просто подключает данного брокера и подписывает указанные темы вашим приложением. Акции MqttAndroidService не знают брокера и темы вообще после того, как он был запущен ОС Android.

Таким образом, правильный подход имеет бэкэнд-сервис для вашего приложения, который знает подробности о брокере и темы. И ваша служба несет ответственность за [re] своевременное подключение брокерских услуг Mqtt и подписки на них.

+1

Возможно, вы правы, но это странно, что на официальном сайте paho [site] (https://eclipse.org/paho/clients/android/) указано, что «предоставляет долговременную службу обработки отправляя и получая сообщения от имени клиентских приложений Android, когда основная активность приложений не может быть запущена » – user2814778

6

Насколько я понимаю, тема Пахо приносит все, что вам нужно. В моем приложении служба paho mqtt-service никогда не останавливается, пока я этого не хочу. Я зарегистрировал Paho-сервис в манифесте для Android со следующим фрагментом.

‹!-- Mqtt Service --› 
‹service android:name="com.ibm.android.service.MqttService" /› 

Это должно сделать трюк.

Более подробная информация в описании http://www.eclipse.org/paho/files/android-javadoc/index.html

+2

Если вы даете ответы на вопросы, скажите почему. Особенно, когда вы меняете все мои ответы. Я здесь, чтобы учиться, поэтому, когда есть что-то, что я могу сделать лучше, скажите мне! – kdoteu

+0

Спасибо. У меня снова есть свободное время, поэтому я скоро продолжу этот проект. :) – wyzard

+0

С чего вы начали сервис? Если служба запускается из активности, то сервис должен быть уничтожен с помощью действия. Однако вы можете снова подключиться, но, как и другие сообщения, это не гарантирует соединение или обратные вызовы. – Clocker

1

библиотеки Android ПОЗ работает отлично. Его просто сложно поддерживать состояние соединения, как только приложение будет в фоновом режиме. Чтобы обеспечить любые другие функции, такие как сохранение параметров подключения, темам pub/sub во время фонового состояния потребуется переписать на уровне библиотеки.

Мои наблюдения: -

  1. После того, как соединение установлено, MqttService держит связь жив, даже если приложение идет фоном. Если сервисный менеджер системы не убивает приложение & своих услуг. Все это возможно, если сеть не будет бесперебойной.

  2. У службы есть свой собственный диспетчер аварийных сообщений, чтобы поддерживать себя в живых.

Я сделал эксперимент, и я сделал небольшое решение, которое может помочь поддерживать доступ к объектам связи во всех действиях приложения. Если вы не отсоединились.

PS: - Решение прост. Но это просто работает как шарм.

https://github.com/ameykshirsagar/mqttconnectionpersistence

Я еще, чтобы сделать реализацию, которая держит MqttService жив, даже после того, как деятельность для приложения разрушается

0

Если под «закрыть» вы имеете в виду «Принудительная остановка» приложение, то да что полностью останавливает приложение, и вы не будете получать сообщения (но это, вероятно, то, что пользователь хотел в любом случае).

Если, однако, «закрыть» означает, что пользователь/андроид убивает приложение, то вы не получаете уведомления, потому что вы больше не «подключаетесь» к брокеру.

Решение будет заключаться в создании пользовательского Service для управления соединениями.

Оформить заказ мой ответ here для детального решения того, что сработало для меня.

Смежные вопросы