Android-MQTT通讯,连接MQTT服务器,发送数据,订阅主题

1,首先用的类库是这个,在app的gradle里添加依赖

compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'

另外还有一个service库,用来后台尝试重连功能的,这里没有使用过,需要更多功能的可以添加这个,并研究一下使用

compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

我这里并没有使用这个


2,如何连接到服务器,并且订阅

   
    
    //声明一个MQTT客户端对象
    private MqttAndroidClient mMqttClient;

    //连接到服务器
    private void connectMQTT1() {

        //连接时使用的clientId
        String clientId = "xxxx";

        mMqttClient = new MqttAndroidClient(this, "tcp://xxxxhost:xxxxport" , clientId);
        //设置连接参数
        MqttConnectOptions options;

        options = new MqttConnectOptions();
        // 清除缓存
        options.setCleanSession(true);
        // 设置超时时间,单位:秒
        options.setConnectionTimeout(15);
        // 心跳包发送间隔,单位:秒
        options.setKeepAliveInterval(15);
        // 用户名
        options.setUserName("username");
        // 密码
        options.setPassword("password".toCharArray());
        // 设置MQTT监听
        mMqttClient.setCallback(new MqttCallback() {
            @Override
            public void connectionLost(Throwable cause) {
                //这里是做断开重连操作的  看个人需求
                mHandler.sendEmptyMessageDelayed(MSG_DELAY_CONNECT_MQTT, 10000);

            }

            @Override
            public void messageArrived(String topic, MqttMessage message) throws Exception {


            }

            @Override
            public void deliveryComplete(IMqttDeliveryToken token) {


            }
        });

        try {

            //进行连接  有多个重载方法  看需求选择
            mMqttClient.connect(options, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {

                    try {
                        //连接成功后订阅主题
                        mMqttClient.subscribe(mTopic, mQos);

                    } catch (MqttException e) {
                        e.printStackTrace();
                    }

                }

                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {

                    //这里是做断开重连操作的  看个人需求
                    mHandler.sendEmptyMessageDelayed(MSG_DELAY_CONNECT_MQTT, 10000);

                }
            });

        } catch (MqttException e) {
            e.printStackTrace();
        }

    }

3,如何发送消息给服务器

private void publishMsgToServer(String msg){
        try {
            mMqttClient.publish(mTopic, msg.getBytes(), mQos.intValue(), mRetained.booleanValue(), null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {


                }

                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {


                }
            });
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }



完结,撒花,能力有限,不足错误之处欢迎指正,共同学习。

阅读更多
个人分类: Android
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭