mqtt安卓客户端

1.MQTT(消息队列遥测传输协议),是一种基于 发布/订阅 (publish/subscribe)模式的"轻量级"通讯协议, 该协议构建于TCP/IP协议上 。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT协议中有三种身份:发布者(Publish)、服务器(Broker)、订阅者(Subscribe)

2.api操作:

Connect:与服务器进行MQTT连接;

Disconnect:与服务器断开MQTT连接;

Subscribe:订阅某个主题;

UnSubscribe:取消订阅某个主题;

Publish:发布消息;

3.安卓客户端示例:

添加依赖:

java 复制代码
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.2'
    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

添加权限

java 复制代码
<uses-permission android:name="android.permission.INTERNET" />

java代码

java 复制代码
//创建实例
//brokerUrl为实例,clientid是唯一值
MqttAndroidClient mqttAndroidClient = new MqttAndroidClient(context, brokerUrl, clientId);

 //设置监听订阅消息的回调
        mqttAndroidClient.setCallback(mqttCallback);
        mMqttConnectOptions = new MqttConnectOptions();
        //设置是否清除缓存
        mMqttConnectOptions.setCleanSession(true);
        //设置超时时间,单位:秒
        mMqttConnectOptions.setConnectionTimeout(60);
        //设置心跳包发送间隔,单位:秒
        mMqttConnectOptions.setKeepAliveInterval(60);
        //设置用户名
        mMqttConnectOptions.setUserName(userName);
        //设置密码
        mMqttConnectOptions.setPassword(password.toCharArray());
        //是否重连
        mMqttConnectOptions.setAutomaticReconnect(false);
        //同时发布的最大消息数量
        mMqttConnectOptions.setMaxInflight(10000);

//建立连接
 mqttAndroidClient.connect(mMqttConnectOptions, null, iMqttActionListener);

  private final MqttCallback mqttCallback = new MqttCallback() {

           //这里处理收到的数据
        @Override
        public void messageArrived(String topic, MqttMessage message) {
       
        }

        @Override
        public void deliveryComplete(IMqttDeliveryToken arg0) {
            Log.d(TAG, "deliveryComplete: ");
        }

        @Override
        public void connectionLost(Throwable arg0) {
            Log.e(TAG, "connectionLost:" + arg0.getMessage());
            Log.e(TAG, "onFailure: " + mqttAndroidClient.isConnected());
            doReconnect();
        }

    };


 private final IMqttActionListener iMqttActionListener = new IMqttActionListener() {
        @Override
        public void onSuccess(IMqttToken arg0) {
           //建立订阅
            try {
                mqttAndroidClient.subscribe(topic, topicQos, null,
                        new IMqttActionListener() {
                            @Override
                            public void onSuccess(IMqttToken asyncActionToken) {
                                Log.d(TAG, "Subscribed topic successfully: " + asyncActionToken
                                        .toString());
                            }

                            @Override
                            public void onFailure(IMqttToken asyncActionToken,
                                                  Throwable exception) {
                                Log.d(TAG, "Failed to subscribe to a topic: " + asyncActionToken
                                        .toString());
                            }

                        });
            } catch (MqttException e) {
                Log.d(TAG, "Subscribe to the topic: " + e);
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(IMqttToken arg0, Throwable arg1) {
            arg1.printStackTrace();
            Log.e(TAG, "iMqttActionListener: arg0:" + arg0.toString() + " arg1:" + arg1
                    .getMessage());
            Log.e(TAG, "onFailure: " + mqttAndroidClient.isConnected());
            doReconnect();
        }
    };



MqttMessage message = new MqttMessage();
            message.setPayload(payload.getBytes());
            message.setQos(0);

//publish到mqtt
 mqttAndroidClient.publish(mTopic, message, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {
                    Log.i(TAG, "publish succeed!");
                    listener.onState(1);
                }

                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    Log.i(TAG, "publish failed!");
                    listener.onState(2);
                }
            });
相关推荐
StevenSurpass4 天前
打印业务彻底解耦:FastPrintAgent 统一 JSON 模型 + FastReport 引擎的设计与落地
mqtt·http·中间件·打印·fastreport
物联网IoT小易9 天前
物联网设备数据异常怎么处理?重复、乱序、断点续传与脏数据治理
物联网·mqtt·数据治理·时序数据库·物联网设备·物联网设备接入·物联网设备连接
sibo_yzm13 天前
谁动了底层的工艺参数?Kepware+OPM-820 双剑合璧实现数据权限管控
mqtt·iot·modbus tcp·opc·kepware·上海泗博
物联网IoT小易17 天前
MQTT消息为什么会重复、丢失或延迟?QoS、离线消息与重连机制详解
物联网·mqtt·消息队列·边缘计算·mqtt协议·物联网平台
StevenSurpass18 天前
智能工厂场景:FastPrintAgent 分布式打印中间件落地应用方案
分布式·mqtt·http·中间件·打印·fastreport
虎王物联23 天前
PHP Swoole实现物联网MQTT数据订阅与WebSocket实时推送
物联网·mqtt·websocket·php·swoole
EXI-小洲1 个月前
Docker 容器部署 EMQX|MQTT 消息代理服务安装与配置教程
运维·mqtt·docker·emqx
小僧景贤1 个月前
嵌入式网络协议 | MQTT、CoAP与HTTP协议深度解析(原理、差异、工程选型、代码实操)
mqtt·http·物联网协议·coap·网络协议选型
DoLovya1 个月前
从零实现 ESP8266 + MQTT 智能门禁:公网一键开门、舵机控制、在线监控完整方案
python·物联网·mqtt·嵌入式·esp8266·门禁系统
慧都小妮子1 个月前
ThingsBoard PE 智慧灌溉:实现精准灌溉与水资源优化利用
物联网·mqtt·智慧农业·iot·规则引擎·thingsboard·精准灌溉