欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Android中怎么利用Kotlin連接MQTT

Android中怎么利用Kotlin 連接 MQTT,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

目前成都創(chuàng)新互聯(lián)公司已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、漢南網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

新建 Kotlin 項(xiàng)目

打開 Android Studio 新建一個(gè)項(xiàng)目,選擇語言為 Kotlin,Android Studio 會(huì)自動(dòng)創(chuàng)建 Kotlin 相關(guān)配置。若要配置現(xiàn)有項(xiàng)目,則可以參考 將 Kotlin 添加到現(xiàn)有應(yīng)用。

添加依賴

打開項(xiàng)目的 build.gradle,添加 Eclipse Paho Java Client 和 Eclipse Paho Android Service 依賴到 dependencies 部分。

dependencies {
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.4'
    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1' 
}

配置 AndroidManifest.xml

Android Service 是 Eclipse 開發(fā)的基于 Android 平臺(tái)的一個(gè)后臺(tái)服務(wù),我們需要將它注冊(cè)到AndroidManifest.xml 文件,同時(shí),我們需要注冊(cè)權(quán)限。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
   ...
   <service android:name="org.eclipse.paho.android.service.MqttService" />
</application>

創(chuàng)建 MQTT 客戶端

private lateinit var mqttClient: MqttAndroidClient
// TAG
companion object {
    const val TAG = "AndroidMqttClient"
}

連接 MQTT 服務(wù)器

本文將使用 EMQ X MQTT Cloud 運(yùn)營(yíng)和維護(hù)的免費(fèi)公共 MQTT 服務(wù)器, EMQ X Cloud 是由 EMQ 推出的安全的 MQTT 物聯(lián)網(wǎng)云服務(wù)平臺(tái),它提供一站式運(yùn)維代管、獨(dú)有隔離環(huán)境的 MQTT 5.0接入服務(wù)。

  • Broker: broker.emqx.io

  • TCP Port: 1883

  • Websocket Port: 8083

fun connect(context: Context) {
        val serverURI = "tcp://broker.emqx.io:1883"
        mqttClient = MqttAndroidClient(context, serverURI, "kotlin_client")
        mqttClient.setCallback(object : MqttCallback {
            override fun messageArrived(topic: String?, message: MqttMessage?) {
                Log.d(TAG, "Receive message: ${message.toString()} from topic: $topic")
            }

            override fun connectionLost(cause: Throwable?) {
                Log.d(TAG, "Connection lost ${cause.toString()}")
            }

            override fun deliveryComplete(token: IMqttDeliveryToken?) {

            }
        })
        val options = MqttConnectOptions()
        try {
            mqttClient.connect(options, null, object : IMqttActionListener {
                override fun onSuccess(asyncActionToken: IMqttToken?) {
                    Log.d(TAG, "Connection success")
                }

                override fun onFailure(asyncActionToken: IMqttToken?, exception: Throwable?) {
                    Log.d(TAG, "Connection failure")
                }
            })
        } catch (e: MqttException) {
            e.printStackTrace()
        }

    }

其中,MqttCallback 接口包含 3 個(gè)方法:

  1. messageArrived:收到 broker 新消息

  2. connectionLost:與 broker 連接丟失

  3. deliveryComplete:消息到 broker 傳遞完成

MqttConnectOptions 用于配置連接設(shè)置,包含用戶名密碼,超時(shí)配置等,具體可以查看其方法。

創(chuàng)建 MQTT 訂閱

訂閱 topic

fun subscribe(topic: String, qos: Int = 1) {
        try {
            mqttClient.subscribe(topic, qos, null, object : IMqttActionListener {
                override fun onSuccess(asyncActionToken: IMqttToken?) {
                    Log.d(TAG, "Subscribed to $topic")
                }

                override fun onFailure(asyncActionToken: IMqttToken?, exception: Throwable?) {
                    Log.d(TAG, "Failed to subscribe $topic")
                }
            })
        } catch (e: MqttException) {
            e.printStackTrace()
        }
    }

取消訂閱

取消訂閱 topic

fun unsubscribe(topic: String) {
        try {
            mqttClient.unsubscribe(topic, null, object : IMqttActionListener {
                override fun onSuccess(asyncActionToken: IMqttToken?) {
                    Log.d(TAG, "Unsubscribed to $topic")
                }

                override fun onFailure(asyncActionToken: IMqttToken?, exception: Throwable?) {
                    Log.d(TAG, "Failed to unsubscribe $topic")
                }
            })
        } catch (e: MqttException) {
            e.printStackTrace()
        }
    }

發(fā)布消息

fun publish(topic: String, msg: String, qos: Int = 1, retained: Boolean = false) {
        try {
            val message = MqttMessage()
            message.payload = msg.toByteArray()
            message.qos = qos
            message.isRetained = retained
            mqttClient.publish(topic, message, null, object : IMqttActionListener {
                override fun onSuccess(asyncActionToken: IMqttToken?) {
                    Log.d(TAG, "$msg published to $topic")
                }

                override fun onFailure(asyncActionToken: IMqttToken?, exception: Throwable?) {
                    Log.d(TAG, "Failed to publish $msg to $topic")
                }
            })
        } catch (e: MqttException) {
            e.printStackTrace()
        }
    }

斷開 MQTT 連接

fun disconnect() {
        try {
            mqttClient.disconnect(null, object : IMqttActionListener {
                override fun onSuccess(asyncActionToken: IMqttToken?) {
                    Log.d(TAG, "Disconnected")
                }

                override fun onFailure(asyncActionToken: IMqttToken?, exception: Throwable?) {
                    Log.d(TAG, "Failed to disconnect")
                }
            })
        } catch (e: MqttException) {
            e.printStackTrace()
        }
    }

測(cè)試

首先將 Android 客戶端連接到 MQTT 服務(wù)器,然后訂閱 topic: a/b,可以看到連接成功和成功訂閱的日志

Android中怎么利用Kotlin 連接 MQTT

然后我們使用 MQTT 5.0 客戶端工具 - MQTT X 進(jìn)行測(cè)試,發(fā)布消息到 topic: a/b,客戶端可以看到收到消息的日志

Android中怎么利用Kotlin 連接 MQTT

Android中怎么利用Kotlin 連接 MQTT

我們?cè)诳蛻舳税l(fā)布消息到 topic: a/b ,因?yàn)槲覀冇嗛喠嗽?topic,同時(shí)也會(huì)收到消息,最后我們斷開客戶端與 MQTT 服務(wù)器的連接,日志如下:

Android中怎么利用Kotlin 連接 MQTT

關(guān)于Android中怎么利用Kotlin 連接 MQTT問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

分享名稱:Android中怎么利用Kotlin連接MQTT
標(biāo)題路徑:http://www.chinadenli.net/article26/jdhgjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷搜索引擎優(yōu)化響應(yīng)式網(wǎng)站品牌網(wǎng)站設(shè)計(jì)軟件開發(fā)服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司