a 集成MQTT后,设备突然没电,后台根据什么来判断设备是否离线?
1 可以根据MQTT内部封装好的心跳
2 可以根据你自定义的心跳,客户端开个线程上报自定义心跳。
3 可以根据遗嘱消息来判断。
1 conOpt.setKeepAliveInterval MQTT内部封装的心跳。
private void init() {
Log.i(TAG, "initMqtt :"+topic);
// 服务器地址(协议+地址+端口号)
client = new MqttAndroidClient(this, serverURI, MainActivity.deviceCode);
conOpt = new MqttConnectOptions();
// 清除缓存
conOpt.setCleanSession(true);
// 设置超时时间,单位:秒
conOpt.setConnectionTimeout(30);
// 心跳包发送间隔,单位:秒
conOpt.setKeepAliveInterval(60);
// 用户名
conOpt.setUserName(MainActivity.deviceCode);
// 密码
conOpt.setPassword(MainActivity.deviceCode.toCharArray());
try {
// 设置MQTT监听并且接受消息
client.setCallback(mqttCallback);
} catch (Exception e) {
e.printStackTrace();
}
// last will message
boolean doConnect = true;
// 最后
try {
conOpt.setWill(topic1, MainActivity.deviceCode.getBytes(), qos, false);
} catch (Exception e) {
e.printStackTrace();
doConnect = false;
iMqttActionListener.onFailure(null, e);
}
if (doConnect) {
doClientConnection();
}
}
2 第二个情况 需自定义,略
3 遗嘱消息 conOpt.setWill(topic1, MainActivity.deviceCode.getBytes(), qos, false);
private void init() {
Log.i(TAG, "initMqtt :"+topic);
// 服务器地址(协议+地址+端口号)
client = new MqttAndroidClient(this, serverURI, MainActivity.deviceCode);
conOpt = new MqttConnectOptions();
// 清除缓存
conOpt.setCleanSession(true);
// 设置超时时间,单位:秒
conOpt.setConnectionTimeout(30);
// 心跳包发送间隔,单位:秒
conOpt.setKeepAliveInterval(60);
// 用户名
conOpt.setUserName(MainActivity.deviceCode);
// 密码
conOpt.setPassword(MainActivity.deviceCode.toCharArray());
try {
// 设置MQTT监听并且接受消息
client.setCallback(mqttCallback);
} catch (Exception e) {
e.printStackTrace();
}
// last will message
boolean doConnect = true;
// 最后
try {
conOpt.setWill(topic1, MainActivity.deviceCode.getBytes(), qos, false);
} catch (Exception e) {
e.printStackTrace();
doConnect = false;
iMqttActionListener.onFailure(null, e);
}
if (doConnect) {
doClientConnection();
}
}
android集成MQTT 点击
https://blog.csdn.net/sun6223508/article/details/123296350