我的APP已经成功连接上MQTT服务器,至于怎么发布和接收,正在研究,研究好了,发上来。
作者写的代码是Java的,但现在都推荐Kotlin
我就把转好的Kotlin代码发出来
package com.example.mqtt_kotlin
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.example.mqtt_kotlin.R
import org.eclipse.paho.android.service.MqttAndroidClient
import org.eclipse.paho.client.mqttv3.IMqttActionListener
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken
import org.eclipse.paho.client.mqttv3.IMqttToken
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended
import org.eclipse.paho.client.mqttv3.MqttConnectOptions
import org.eclipse.paho.client.mqttv3.MqttMessage
class MainActivity : AppCompatActivity() {
private val serverUri = "tcp://mqtt.hui-ke.com:1883"
private val userName = "admin"
private val passWord = "admin"
private val clientId = "mqtt_kotlin手机客户端"
private val mqtt_sub_topic = "Android_Get" //需要订阅的主题
private val mqtt_pub_topic = "Android_Set" //需要发布的主题
private var mqtt_client: MqttAndroidClient? = null //创建一个mqtt_client对象
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mqtt_init_Connect()
}
fun mqtt_init_Connect() {
try {
//实例化mqtt_client,第一个参数是app的上下文,直接填入就行,然后填入我们定义的serverUri和clientId
mqtt_client = MqttAndroidClient(applicationContext, serverUri, clientId)
//创建并实例化一个MQTT的连接参数对象
val options = MqttConnectOptions()
//然后设置对应的参数
options.userName = userName //设置连接的用户名
options.password = passWord.toCharArray() //设置连接的密码
options.connectionTimeout = 30 // 设置超时时间,单位为秒
options.keepAliveInterval = 60 //设置心跳,30s
options.isAutomaticReconnect = true //是否重连
//设置是否清空session,设置为false表示服务器会保留客户端的连接记录,设置为true表示每次连接到服务器都以新的身份连接
options.isCleanSession = true
//设置回调
mqtt_client!!.setCallback(object : MqttCallbackExtended {
override fun connectComplete(reconnect: Boolean, serverURI: String) {
//连接成功
makeToast("连接成功")
}
override fun connectionLost(cause: Throwable) {
//连接丢失后,一般在这里面进行重连
makeToast("连接中断")
}
override fun deliveryComplete(token: IMqttDeliveryToken) {
//publish后会执行到这里
}
@Throws(Exception::class)
override fun messageArrived(topicName: String, message: MqttMessage) {
//subscribe后得到的消息会执行到这里面
}
})
mqtt_client!!.connect(options)
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun makeToast(toast_str: String) {
Toast.makeText(this@MainActivity, toast_str, Toast.LENGTH_LONG).show()
}
}