java - Android Paho 客户端 - 如何启用离线缓冲并在网络启用后发送消息?

标签 java android mqtt paho

我使用 Android Paho 客户端库 v1.1.0,QoS 2。 我通过 MQTT 发布/订阅的代码:

mClient = new MqttAndroidClient(this, uri, clientId, new   MqttDefaultFilePersistence());
MqttConnectOptions conOpt = new MqttConnectOptions();

conOpt.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1);
conOpt.setCleanSession(true);
conOpt.setAutomaticReconnect(true);

mClient.setTraceEnabled(true);

mClient.setCallback(this);
mClient.setTraceCallback(this);

IMqttToken connectToken = mClient.connect(conOpt, null, this);

和离线缓冲选项:

@Override
public void onSuccess(IMqttToken iMqttToken) {
    this.disconnectedBufferOptions = new DisconnectedBufferOptions();
    this.disconnectedBufferOptions.setBufferEnabled(true);

    mClient.setBufferOpts(disconnectedBufferOptions);

    subscribe(topic);
}

如果网络可用,则消息发布到主题,但如果禁用并再次启用离线消息,则不会发送。 如何正确启用离线缓冲选项并发送离线消息? 附加信息:网络禁用并发布消息后 mClient.getBufferedMessageCount() = 0

最佳答案

使用 conOpt.setAutomaticReconnect(true) 以及连接 token onSuccess 中的以下代码 fragment 为我解决了这个问题。

DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();

disconnectedBufferOptions.setBufferEnabled(true);
disconnectedBufferOptions.setBufferSize(100);
disconnectedBufferOptions.setPersistBuffer(false);
disconnectedBufferOptions.setDeleteOldestMessages(false);

mClient.setBufferOpts(disconnectedBufferOptions);        

关于java - Android Paho 客户端 - 如何启用离线缓冲并在网络启用后发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39781794/

相关文章:

mqtt - IOT Mosquitto mqtt 如何在本地主机上测试

ssl - Mosquitto 与 MQTTS 和 WSS 在同一个代理中

python - MQTT msg.payload 有趣的字符

java - 您能否在不迭代的情况下有效地从映射中删除任意 k 个元素?

java - 如何在java中更改自定义android键盘的按键标签

Java UTF-8 奇怪的行为

android - 将参数从 Activity 传递到 BroadcastReceiver

android,如何在edittext中绘制虚线

java - 寻找 .NET 3.5/J2EE 体系结构概念比较文章/图表

java - 如何等待 sendBroadcast 完成