【问题标题】:Paho MQTT Android service wake up activityPaho MQTT Android 服务唤醒活动
【发布时间】:2015-01-25 21:53:44
【问题描述】:

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

有没有人有经验如何正确修改/实现服务以接收消息,即使应用程序没有运行?

【问题讨论】:

  • 您曾经解决过您的问题吗?我遇到了类似的问题,即使在应用程序关闭后仍试图保持服务运行。
  • 还没有。不幸的是,我现在(工作)太忙了,无法处理这个爱好项目,但我会向你发布我的解决方案,如果我能够让它工作的话。
  • 我已经取得了一些进展。我已经实现了一个服务(START_STICKY),它包含 MqttClient 对象(以及 setCallback、connect、subscribe 等)方法。这样我就实现了,即使我的活动没有运行,我的应用程序也会收到回调通知。现在我的问题是:在小米设备上我无法实现“开机启动服务”功能,因为 MIUI 有一个内置的安全组件,它拒绝它,但这是另一个问题。

标签: android android-service mqtt


【解决方案1】:

据我了解,Paho 为您带来了您所需要的一切。在我的应用程序中,paho mqtt-service 永远不会停止,直到我想要它。 我使用以下 sn-p 将清单中的 Paho 服务注册到 Android。

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

这应该可以解决问题。

更多信息在http://www.eclipse.org/paho/files/android-javadoc/index.html的描述中

【讨论】:

  • 如果您对答案投反对票,请说明原因。尤其是当您对我所有的答案投反对票时。我是来学习的,所以当有什么我可以做得更好的时候,告诉我!
  • 谢谢。我又有了一些空闲时间,所以我会尽快继续这个项目。 :)
  • 您从哪里开始服务?如果服务是从一个活动启动的,那么服务应该随活动一起被销毁。但是,您可以重新连接,但就像其他帖子所说的那样,这并不能保证连接或回调。
  • 该服务应该从 Android 操作系统启动,正如 @Kane 的观点。所以它独立于活动。
  • 您能给我们提供一个样品吗?如果我理解正确:有 MqttService,它连接到代理并订阅指定的主题、发布消息等......,并且应该有 另一个 自己的服务,它允许我的应用程序甚至在后台获取消息如果我的活动被破坏了?如果我是对的,我的后台服务应该包括什么?
【解决方案2】:

Mqtt 服务在某种程度上是库而不是一般服务。它只是连接给定的代理并通过您的应用程序订阅指定的主题。股票MqttAndroidService被Android OS启动后根本不知道broker和topic。

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

【讨论】:

  • 你可能是对的,但奇怪的是,在 paho 官方 site 上声明“当应用程序的主 Activity 可能不是时,代表 Android 客户端应用程序处理发送和接收消息的长期运行服务跑步”
【解决方案3】:

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

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

【讨论】:

【解决方案4】:

Paho 的 Android 库运行良好。一旦应用程序进入后台,就很难维持连接状态。为了提供任何其他功能,例如存储连接选项,在后台状态下发布/订阅的主题需要在库级别进行一些重写。

我的观察:-

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

  2. 服务有自己的警报管理器来保持自己的生命。

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

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

https://github.com/ameykshirsagar/mqttconnectionpersistence

我还没有实现即使在应用程序的活动被破坏后也能保持 MqttService 活动

【讨论】:

    【解决方案5】:

    如果“关闭”是指“强制停止”应用程序,那么是的,这会完全停止应用程序并且您不会收到消息(但这可能是用户想要的)。

    但是,如果“关闭”是指用户/android 终止应用程序,那么您将不会收到通知,因为您不再“连接”代理。

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

    查看我的回答 here,了解对我有用的详细解决方案。

    【讨论】:

      猜你喜欢
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多