1.摘要
MQTT
(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的、基于发布/订阅(Publish/Subscribe
)模式的通信协议,最初由 IBM 在1999年开发。它设计用于在低带宽、不稳定的网络环境下进行通信,适用于物联网(IoT)和机器对机器(M2M)通信。
2.准备工作
在项目的 build.gradle 文件中添加 MQTT 相关的依赖库:
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
添加权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
3.代码实现
class MqttService: Service() {
private val TAG = "MqttService"
private lateinit var mqttAndroidClient: MqttAndroidClient
private lateinit var mqttConnectOptions: MqttConnectOptions
private val serverUri = "tcp://YOUR_BROKER_URI:PORT"// 修改为你的 MQTT 服务器地址
private val clientId = "AndroidClient"// 修改为你的客户端 ID
private val username = "YOUR_USERNAME"// 修改为你的用户名
private val password = "YOUR_PASSWORD"// 修改为你的密码
private val PUBLISH_TOPIC = "YOUR_PUBLISH_TOPIC"
private lateinit var handler: Handler
private val retryInterval: Long = 5000 // 重试间隔,单位:毫秒(5秒)
override fun onCreate() {
super.onCreate()
handler = Handler()
initializeMqttClient()
}
// 初始化 MQTT 客户端
private fun initializeMqttClient() {
mqttAndroidClient = MqttAndroidClient(applicationContext, serverUri, clientId)
mqttConnectOptions = MqttConnectOptions().apply {