Я использую MQTT-клиент, работающий на Android Mobile API Level 27, при попытке переподключиться к моему москитному брокеру, если мое соединение потеряно. оно успешно подключается к mosquitto при инициализации приложения, однако по какой-то причине, если соединение теряется, оно не восстанавливает соединение.
Я установил isAutomaticReconnect в true.
Mqtt объект класс
fun connect(context: Context) {
connectOptions.keepAliveInterval=60//seconds
connectOptions.isAutomaticReconnect = true
connectOptions.isCleanSession = false
try {
val token = mqttAndroidClient.connect()
token.actionCallback = object : IMqttActionListener {
override fun onSuccess(asyncActionToken: IMqttToken)
{
subscribe(context)
}override fun onFailure(asyncActionToken: IMqttToken, exception: Throwable) {
Log.i("Connection", "failure")
// Give your callback on connection failure here
exception.printStackTrace()
}
}
} catch (e: MqttException) {
// Give your callback on connection failure here
e.printStackTrace()
}
}
private fun subscribe(context:Context) {
val qos = 2 // Mention your qos value
try {
mqttAndroidClient.subscribe(topic,qos,null,object :
IMqttActionListener{
override fun onSuccess(asyncActionToken: IMqttToken?) {
}
override fun onFailure(asyncActionToken: IMqttToken?, exception: Throwable?) {
}
})
}catch (e:MqttException){
e.printStackTrace()
}
mqttAndroidClient.setCallback(object : MqttCallbackExtended {
override fun connectComplete(reconnect: Boolean, serverURI: String) {
}
override fun connectionLost(cause: Throwable) {
Log.e("mqtt", "The connection was lost")
}
@Throws(Exception::class)
override fun messageArrived(topic: String, message: MqttMessage) {
recieveQueue.add(String(message.payload, StandardCharsets.UTF_8))
}
override fun deliveryComplete(token: IMqttDeliveryToken) {
}
})
}
MainActivity:
MqttClient.connect(this)