MQTT协议实现Android中的消息收发

简介:

MQTT协议实现Android中的消息收发

前言
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输),基于发布/订阅范式的消息协议,是一种极其简单和轻量级的消息协议,专为受限设备和低带宽、高延迟或不可靠的网络设计。今天主要说明一下MQTT协议在Android中进行消息的收发应用,关于MQTT协议的基础内容请参考之前介绍的 MQTT协议 相关内容。

效果
使用前先查看一下简单的效果图,MQTT相关的连接、订阅,发送及接收:

使用过程
依赖添加
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
实际使用中发现,如果仅用第一条依赖也是能够实现我们所需要的的消息收发功能的,其中MqttClient类实现了MQTT相关的连接、订阅、发送及接收功能,第二条依赖是基于MqttClient针对Android客户端进行封装了MqttAndroidClient进行使用,其中实现了Android相关的广播、服务相关内容。

使用中如果采用的是Androidx开发环境,还需要添加如下依赖,否则MqttAndroidClient服务中会找不到本地广播服务,导致无法运行使用。

implementation 'androidx.legacy:legacy-support-v4:1.0.0'
权限添加





服务添加

这里我们主要介绍MqttClient类实现的MQTT协议消息的收发,而进一步封装的MqttAndroidClient和其使用过程基本类似,想要查看其具体使用,可跳转对应Demo链接获取详细内容。

初始化MQTT客户端内容,代理服务器broker选用的 HiveMQ公共代理 来实现:
public void initClient() {

try {
    MemoryPersistence persistence = new MemoryPersistence();
    // 设置唯一客户端ID
    clientId = clientId + System.currentTimeMillis();
    //设置订阅方订阅的Topic集合,遵循MQTT的订阅规则,可以是多级Topic集合
    final String topicFilter = topic;
    //服务质量,对应topicFilter
    final int qos = 0;
    //创建客户端
    sampleClient = new MqttClient(broker, clientId, persistence);
    //配置回调函数
    sampleClient.setCallback(new MqttCallbackExtended() {
        @Override
        public void connectComplete(boolean reconnect, String serverUri) {
            setTextInfo("connectComplete: " + serverUri);
            try {
                //连接成功,需要上传客户端所有的订阅关系
                sampleClient.subscribe(topicFilter, qos);
            } catch (MqttException e) {
                setTextInfo("subscribeException: " + e.getMessage());
            }
        }

        @Override
        public void connectionLost(Throwable cause) {
            setTextInfo("connectionLostException: " + cause.getMessage());
        }

        @Override
        public void messageArrived(String topic, MqttMessage message) {
            setTextInfo("messageArrived:" + new String(message.getPayload()));
        }

        @Override
        public void deliveryComplete(IMqttDeliveryToken token) {
            setTextInfo("deliveryComplete");
        }
    });
    //创建连接选择
    MqttConnectOptions connOpts = createConnectOptions(userName, passWord);
    setTextInfo("Connecting to broker: " + broker);
    //创建服务连接
    sampleClient.connect(connOpts);
} catch (MqttException me) {
    setTextInfo("initException: " + me.getMessage());
}

}
创建连接选择如下,可设置用户名、密码:
private MqttConnectOptions createConnectOptions(String userName, String passWord) {

MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setUserName(userName);
connOpts.setPassword(passWord.toCharArray());
connOpts.setAutomaticReconnect(true);
// 设置连接超时时间, 单位为秒,默认30
connOpts.setConnectionTimeout(30);
// 设置会话心跳时间,单位为秒,默认20
connOpts.setKeepAliveInterval(20);
return connOpts;

}
消息发布:
public void publishMsg() {

String content = mEtMessage.getText().toString().trim();
if (TextUtils.isEmpty(content)) {
    content = "Hello MQTT ";
}
//此处消息体需要传入byte数组
MqttMessage message = new MqttMessage(content.getBytes());
//设置质量级别
message.setQos(0);
try {
    if (sampleClient != null && sampleClient.isConnected()) {
        /*
         * 消息发送到某个主题Topic,所有订阅这个Topic的设备都能收到这个消息。
         * 遵循MQTT的发布订阅规范,Topic也可以是多级Topic。此处设置了发送到一级Topic。
         */
        sampleClient.publish(topic, message);
        setTextInfo("publishMsg: " + message);
    }
} catch (MqttException e) {
    setTextInfo(" publishException: " + e.getMessage());
}

}
连接断开:
public void disconnect() {

try {
    sampleClient.disconnect();
} catch (MqttException e) {
    setMqttMessage("disconnectException: " + e.getMessage());
}

}
MQTT协议实现Android中的消息收发就到这里了,内容已上传至Github开发记录,欢迎点击查阅及Star,我也会继续补充其它有用的知识及例子在项目上。

原文地址https://www.cnblogs.com/jqnl/p/12660824.html

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
10月前
|
数据采集 传感器 监控
Modbus 与 MQTT 协议兼容:MyEMS 的泛在能源数据采集技术实现
MyEMS深度融合Modbus与MQTT协议,破解能源数据采集中协议碎片化、网络异构、数据孤岛等难题。通过Modbus接入95%以上工业设备,实现现场数据精准“拉取”;依托MQTT构建高效物联网传输通道,支持多源数据主动“推送”与云端集成。边缘侧采集规整,中心侧汇聚分析,形成统一、可靠、低延迟的数据流。该架构兼具高兼容性、强扩展性与低运维成本,广泛应用于工业园区、商业楼宇及集团型企业,支撑实时监控、AI分析与跨系统融合,打造泛在互联的能源数据底座,助力企业实现全面智慧能源管理。
612 6
|
数据可视化 关系型数据库 MySQL
嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化
通过本文的介绍,我们详细讲解了如何结合嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议,实现数据的采集、传输、存储和可视化。这种架构在物联网项目中非常常见,可以有效地处理和展示实时数据。希望本文能帮助您更好地理解和应用这些技术,构建高效、可靠的数据处理和可视化系统。
872 82
|
XML API 网络安全
【安卓】在安卓中使用HTTP协议的最佳实践
【安卓】在安卓中使用HTTP协议的最佳实践
609 4
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
2634 0
|
数据采集 传感器 监控
多协议网关BL110钡铼6路RS485转MQTT协议云网关
BL110钡铼6路RS485转MQTT协议云网关是一款高性能、易配置的工业级设备,适用于各种需要远程监控和数据采集的物联网应用场景。通过将传统RS485设备的数据转换为MQTT协议并上传至云平台,实现了设备的远程管理和智能控制,极大地提升了系统的管理效率和响应速度。
653 2
|
网络协议 物联网 网络性能优化
物联网协议比较 MQTT CoAP RESTful/HTTP XMPP
【10月更文挑战第18天】本文介绍了物联网领域中四种主要的通信协议:MQTT、CoAP、RESTful/HTTP和XMPP,分别从其特点、应用场景及优缺点进行了详细对比,并提供了简单的示例代码。适合开发者根据具体需求选择合适的协议。
816 5
|
消息中间件 监控 物联网
MQTT协议对接及RabbitMQ的使用记录
通过合理对接MQTT协议并利用RabbitMQ的强大功能,可以构建一个高效、可靠的消息通信系统。无论是物联网设备间的通信还是微服务架构下的服务间消息传递,MQTT和RabbitMQ的组合都提供了一个强有力的解决方案。在实际应用中,应根据具体需求和环境进行适当的配置和优化,以发挥出这两个技术的最大效能。
1432 0
|
数据采集 监控 物联网
MQTT协议在智能制造中的应用案例与效益分析
【6月更文挑战第8天】MQTT协议在智能制造中的应用案例与效益分析
743 1
|
物联网 C# 智能硬件
智能家居新篇章:WPF与物联网的智慧碰撞——通过MQTT协议连接与控制智能设备,打造现代科技生活的完美体验
【8月更文挑战第31天】物联网(IoT)技术的发展使智能家居设备成为现代家庭的一部分。通过物联网,家用电器和传感器可以互联互通,实现远程控制和状态监测等功能。本文将探讨如何在Windows Presentation Foundation(WPF)应用中集成物联网技术,通过具体示例代码展示其实现过程。文章首先介绍了MQTT协议及其在智能家居中的应用,并详细描述了使用Wi-Fi连接方式的原因。随后,通过安装Paho MQTT客户端库并创建MQTT客户端实例,演示了如何编写一个简单的WPF应用程序来控制智能灯泡。
869 0
|
物联网 网络性能优化 Python
"掌握MQTT协议,开启物联网通信新篇章——揭秘轻量级消息传输背后的力量!"
【8月更文挑战第21天】MQTT是一种轻量级的消息传输协议,以其低功耗、低带宽的特点在物联网和移动应用领域广泛应用。基于发布/订阅模型,MQTT支持三种服务质量级别,非常适合受限网络环境。本文详细阐述了MQTT的工作原理及特点,并提供了使用Python `paho-mqtt`库实现的发布与订阅示例代码,帮助读者快速掌握MQTT的应用技巧。
586 0