我正在尝试使用Paho Android MQTT库(downloaded from here)。 示例服务应用程序正常工作,订阅和发布方法在示例应用程序运行时也能正常工作。当我关闭时,设备不再接收消息通知。
是否有人有过如何正确修改/实施服务以接收消息的经验,即使应用程序没有运行?
答案 0 :(得分:6)
据我所知,Paho带来了你所需要的一切。在我的应用程序中,paho mqtt-service永远不会停止,直到我想要它。 我使用以下代码段在Android清单中注册了Paho-service。
‹!-- Mqtt Service --›
‹service android:name="com.ibm.android.service.MqttService" /›
这应该可以解决问题。
http://www.eclipse.org/paho/files/android-javadoc/index.html
说明中的更多信息答案 1 :(得分:3)
Mqtt服务是某种方式的库而不是一般服务。它只是连接给定的代理并通过您的应用程序订阅指定的主题。股票MqttAndroidService在Android OS启动后根本不知道代理和主题。
因此,正确的方法是为您的应用程序提供后端服务,该服务知道有关代理和主题的详细信息。您的服务负责在适当的时间[重新]连接Mqtt经纪人和订阅主题。
答案 2 :(得分:1)
您应该实现后台服务,请参阅: http://developer.android.com/training/run-background-service/index.html
或者根据用例,您可以在服务器端实现推送通知,并在客户端未订阅MQTT代理时接收它们。
答案 3 :(得分:1)
Paho的Android库运行良好。一旦应用程序进入后台,它就很难维持连接状态。要提供任何其他功能,如存储连接选项,在后台状态期间主题到pub / sub将需要在库级别进行一些重写。
我的观察: -
建立连接后,即使应用程序变为后台, MqttService 也会保持连接处于活动状态。除非系统的服务经理杀死了应用程序&它的服务。除非网络保持不间断,否则所有这一切都是可能的。
该服务拥有自己的警报管理器以保持活力。
我做了一个实验,我做了一个小的解决方案,可以帮助在整个应用程序的活动中保持连接对象的可访问性。除非你断开连接。
PS: - 解决方案很简单。但它就像一个魅力。https://github.com/ameykshirsagar/mqttconnectionpersistence
即使应用程序的活动被破坏,我还没有实现使 MqttService 保持活动的实现
答案 4 :(得分:0)
If by 'close' you mean 'force stop' the app, then yes that completely stops the app and you won't receive messages (but that's probably what the user wanted anyways).
If however, by 'close' you mean the user/android killing the app, then you are not receiving notifications because you are not 'connected' the broker anymore.
A solution would be to create a custom Service
to manage connections.
Checkout my answer here for a detailed solution of what worked for me.