Android持久的MQTT连接

时间:2015-07-24 22:48:19

标签: android tcp mqtt

我需要在应用程序关闭后启动连接 - 调用onDestroy()并且应用程序不再可见。

MainActivity在

中启动服务
@Override
public void onCreate(Bundle savedInstanceState){

if(savedInstanceState == null) {
        startService(new Intent(MainActivity.this, MqttService.class));
}

该服务通过AsyncTask启动MQTT连接。

@Override
public int onStartCommand(Intent intent, int flags, int startId){

    Notification note = createNotification();
    //startForeground(20, note);
    new MqttTask().execute(CONNECT_RETRIES);
    return START_REDELIVER_INTENT;
}

只要应用程序保持活动状态,MQTT连接就会保持活动状态,因为服务也已准备就绪。该服务还实现了一些我需要使用的回调方法,特别是:

@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {

我的目标是即使在应用程序关闭时也允许连接处于活动状态,这样用户就可以通过连接接收消息而无需打开应用程序。我想这个想法是在应用程序被销毁时重新连接

我尝试了什么:

1)我不喜欢这个解决方案,因为它虽然有效但却为用户提供了烦人的通知

 startForeground(23, createNotification());

2)我尝试使用AlarmManager在一定的时间间隔内调用startService(MqttService.class),但根据最佳实践,不推荐这样做。

3)我看过https://developer.android.com/training/sync-adapters/creating-sync-adapter.html然而这似乎更像是“连接一次”,而不是一个持续的和已建立的联系。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您是否看过Paho Android服务,而不是编写自己的服务?

https://eclipse.org/paho/clients/android/

这应该在后台运行并保持运行直到它被明确杀死。

此外,如果您想继续使用自己的服务,那么您应该看看上一个问题。

How to restart a killed service automatically?