Paho MQTT Android 服务唤醒 activity

Paho MQTT Android service wake up activity

我正在尝试使用 Paho Android MQTT 库 (downloaded from here)。 示例 service application 工作正常,subscribepublish 方法在示例应用程序时也工作正常是 运行。当我关闭它时,设备不再接收消息通知。

有没有人知道如何 modify/implement 即使应用程序不是 运行 服务也能正确接收消息?

您应该实施后台服务,请参阅: http://developer.android.com/training/run-background-service/index.html

或者根据用例,您可以在服务器端实现推送通知,并在客户端未订阅 MQTT 代理时接收它们。

Mqtt 服务在某种程度上比一般服务更像是库。它只是连接给定的代理并通过您的应用程序订阅指定的主题。 stock MqttAndroid服务在Android OS.

启动后完全不知道broker和topic

因此,正确的方法是为您的应用程序提供后端服务,该服务知道有关代理和主题的详细信息。您的服务负责在适当的时间[重新]连接 Mqtt 代理和订阅主题。

据我了解,Paho 主题可以满足您的所有需求。在我的应用程序中,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

的描述中有更多信息

Paho 的 Android 图书馆工作正常。一旦应用程序进入后台,就很难保持连接状态。要提供任何其他功能,如存储连接选项,在后台状态期间 pub/sub 的主题将需要在库级别进行一些重写。

我的观察:-

  1. 建立连接后,MqttService 会保持连接处于活动状态,即使应用程序进入后台也是如此。除非系统的服务管理器终止应用程序及其服务。这一切都是可能的,除非网络保持不间断。

  2. 该服务有自己的警报管理器来保持自身活动。

我做了一个实验,并提出了一个小的解决方案,可以帮助在整个应用程序的活动中保持连接对象的可访问性。除非你掉线了。

PS :- 解决方案非常简单。但它就像一个魅力。

https://github.com/ameykshirsagar/mqttconnectionpersistence

我还没有实现即使在应用程序的 activity 被销毁后 MqttService 仍然存在的实现

如果 'close' 你的意思是 'force stop' 应用程序,那么是的,这将完全停止应用程序并且你不会收到消息(但这可能是用户想要的)。

但是,如果 'close' 你的意思是 user/android 终止应用程序,那么你将不会收到通知,因为你不再是 'connected' 经纪人。

一个解决方案是创建自定义 Service 来管理连接。

查看我的回答 here 以获得对我有用的详细解决方案。