Android使用MQTT
创始人
2025-01-10 19:36:21
0

目录

MQTT

MQTT通信流程

第三方MQTT服务

使用步骤

使用注意事项

使用MQTT问题


前言

        本文是一个学习过程记录。

MQTT

        MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的消息传输协议,常用于物联网(IoT)应用中。

        MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
MQTT传输的消息分为:主题(Topic)和载荷(payload)两部分:

  • Topic(主题)消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);它是消息的标识符,用于指定消息的类型或者位置。主题是一个由层级结构组成的字符串,使用斜杠(/)作为分隔符。例如,home/bedroom/temperature 是一个主题,用于表示卧室的温度数据。在MQTT中,发布者发布消息到特定的主题,而订阅者通过订阅主题来接收相关消息。
  • Payload(载荷)是实际的消息内容。它可以是任何类型的数据,例如文本、JSON、二进制数据等。发布者将消息发送到特定的主题时,将携带一个载荷,订阅者接收到消息后,可以从载荷中提取所需的数据。

        当应用数据通过MQTT网络发送时,MQTT会把与之相关的服务质量(QoS)和主题名(Topic)相关连。

QoS(服务质量):QoS定义了消息传递的可靠性级别。MQTT支持三个QoS级别:

  • QoS 0(最多一次):消息尽最多一次传递。消息不会进行确认,也不会重传。适用于实时性要求不高的数据,可能会丢失消息。
  • QoS 1(至少一次):消息至少传递一次,确保消息至少被接收一次。如果消息未收到确认,会进行重传。适用于需要确保消息不丢失,但可以重复传输的情况。
  • QoS 2(仅一次):消息只传递一次,确保消息仅被接收一次。会进行两阶段确认,确保消息的准确传递。适用于要求非常高的数据完整性的情况。

使用MQTT参考SDK,一步一步操作来也可以完成,EMQX SDK使用指南:Android 使用 Kotlin 连接 MQTT | EMQ

这篇文章讲的非常清楚:

Android使用MQTT订阅及发布消息((一)初步了解Mqtt以及实现Android操作mqtt服务)_android mqtt-CSDN博客 ​​​​​​

MQTT通信流程

  1. Publisher发布消息到Broker
  2. Broker接收消息并根据主题将消息路由给相应的Subscriber
  3. Subscriber接收到消息并处理。

第三方MQTT服务

  1. 使用EMQX,15天免费,网站:EMQX
  2. EMQX SDK使用指南:Android 使用 Kotlin 连接 MQTT | EMQ
  3. 这里使用 专有版,如果使用 serverless,进行测试连接会报错 Unregister alarmreceiver to

使用步骤

  1. 引入依赖
  2. 先连接
  3. 订阅
  4. 发布
  5. 取消订阅
  6. 取消连接

使用注意事项

        在连接的时候,千万别忘记tcp://,否则会连接失败。

val serverURI = "tcp://b601afc1.ala.dedicated.aliyun.emqxcloud.cn:1883"

        使用只需要创建一个【客户端认证】,当作连接账号和密码。其他一概不用操作

使用MQTT问题

这个播客已经解决:Android——Failed resolution of: Landroid/support/v4/content/LocalBroadcastManager-CSDN博客

问题1、java.lang.NoClassDefFoundError: Failed resolution of:Landroid/support/v4/content/LocalBroadcastManager;

FATAL EXCEPTION: main Process: com.dfg.mqtt, PID: 5049 java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/content/LocalBroadcastManager; at org.eclipse.paho.android.service.MqttAndroidClient.registerReceiver(MqttAndroidClient.java:450) at org.eclipse.paho.android.service.MqttAndroidClient.connect(MqttAndroidClient.java:428) at com.dfg.mqtt.MainActivity.connect(MainActivity.kt:74) at com.dfg.mqtt.MainActivity.onCreate$lambda$0(MainActivity.kt:29) at com.dfg.mqtt.MainActivity.$r8$lambda$lscMx1wR-Gmz1hZBIc0L-o8IfBI(Unknown Source:0) at com.dfg.mqtt.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:2) at android.view.View.performClick(View.java:6599) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1202) at android.view.View.performClickInternal(View.java:6576) at android.view.View.access$3100(View.java:780) at android.view.View$PerformClick.run(View.java:25899) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6819) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860) Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.content.LocalBroadcastManager" on path: DexPathList[[zip file "/data/app/com.dfg.mqtt-J_20_A6NK3ulIe2yTD8PeA==/base.apk"],nativeLibraryDirectories=[/data/app/com.dfg.mqtt-J_20_A6NK3ulIe2yTD8PeA==/lib/x86_64, /system/lib64, /system/vendor/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312)

解决:

1、往build.gradle引入

implementation "com.android.support:support-v4:30.4.1"

2、gradle.properties加入

android.enableJetifier=true

3、Sync编译问题解决

我写的功能:GitHub - Fugui-Dai/MQTT

相关内容

热门资讯

插件辅助挂!werplan免费... 插件辅助挂!werplan免费挂下载(透视)开心游戏辅助器(辅助)都是确实有挂(哔哩哔哩)1、游戏颠...
详情了解!广东闲来辅助软件(辅... 详情了解!广东闲来辅助软件(辅助)大赢家跑得快都是存在有辅助工具(哔哩哔哩)1、广东闲来辅助软件透视...
出乎意料的是!hhpoker辅... 出乎意料的是!hhpoker辅助挂(透视)微乐脚本(好像真的有辅助教程)-哔哩哔哩1、点击下载安装,...
透视攻略!哈糖大菠萝怎么挂(透... 透视攻略!哈糖大菠萝怎么挂(透视)新九哥开挂(辅助)切实真的有器(哔哩哔哩)1.哈糖大菠萝怎么挂 选...
透视工具!红龙poker作必弊... 透视工具!红龙poker作必弊指令(透视)如何下载微乐自建房免费黑科技(切实存在有辅助教程)-哔哩哔...
有挂了解!鱼乐达人透视血量辅助... 有挂了解!鱼乐达人透视血量辅助器(辅助)博雅保山棋牌其实真的是有辅助神器(哔哩哔哩)1、鱼乐达人透视...
现场直击!pokemmo手机版... 现场直击!pokemmo手机版脚本(透视)兴动休闲辅助(辅助)切实存在有神器(哔哩哔哩)1、游戏颠覆...
专业了解!杭州都莱挂(辅助)风... 专业了解!杭州都莱挂(辅助)风云联盟麻将切实真的有辅助修改器(哔哩哔哩)杭州都莱挂脚本下载中分为三种...
黑科技教程!约局吧德州透视(透... 黑科技教程!约局吧德州透视(透视)微信微乐辅助免费(都是真的是有辅助挂)-哔哩哔哩约局吧德州透视破解...
现有关情况通报如下!拱趴大菠萝... 现有关情况通报如下!拱趴大菠萝挂(透视)川娱竞技插件(辅助)一贯是真的有软件(哔哩哔哩)1、进入游戏...