zoukankan      html  css  js  c++  java
  • ESA2GJK1DH1K基础篇: Android实现MQTT封装源码使用说明

    说明

      这一节说明一下基础篇APP源码里面MyMqttCilent.java这个文件的使用

    新建工程

     

    安装MQTT的jar包

    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.2'

    
    
    

    打开基础篇第一节测试里面的APP源码里面的工程

      

    拷贝MyMqttClient.java文件

      一,拷贝第一节测试里面的APP源码里面的MyMqttClient.java 到当前工程

        

        

        

      二,源码里面是使用的手机的IMEI作为了 MQTT的 ClientID

        

     

      咱呢,这节着重介绍包的使用,所以这个地方咱直接用时间戳作为ClientID就可以了

        

    添加上网络权限

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

      

    连接MQTT

      一,根据自己的MQTT服务器修改

        

      二,控制连接

        该代码写一次即可,后期断线自动重连

        MyMqttClient.sharedCenter().setConnect();

             

    测试

      连接上服务器以后会打印 Connect Success

      

    订阅主题


      MyMqttClient.sharedCenter().setSubscribe("1111",0);//订阅主题1111,消息等级0

      

    建议使用定时器订阅

    public class MainActivity extends AppCompatActivity {
        //定时器用于轮训订阅主题
        private Timer timerSubscribeTopic = null;
        private TimerTask TimerTaskSubscribeTopic = null;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            MyMqttClient.sharedCenter().setConnect();
    
            /**
             * 订阅主题成功回调
             */
            MyMqttClient.sharedCenter().setOnServerSubscribeCallback(new MyMqttClient.OnServerSubscribeSuccessCallback() {
                @Override
                public void callback(String Topic, int qos) {
                    if (Topic.equals("1111")){//订阅1111成功
                        stopTimerSubscribeTopic();//订阅到主题,停止订阅
                    }
                }
            });
            startTimerSubscribeTopic();//定时订阅主题
        }
    
        /**
         * 定时器每隔1S尝试订阅主题
         */
        private void startTimerSubscribeTopic(){
            if (timerSubscribeTopic == null) {
                timerSubscribeTopic = new Timer();
            }
            if (TimerTaskSubscribeTopic == null) {
                TimerTaskSubscribeTopic = new TimerTask() {
                    @Override
                    public void run() {
                        MyMqttClient.sharedCenter().setSubscribe("1111",0);//订阅主题1111,消息等级0
                    }
                };
            }
            if(timerSubscribeTopic != null && TimerTaskSubscribeTopic != null )
                timerSubscribeTopic.schedule(TimerTaskSubscribeTopic, 0, 1000);
        }
    
        private void stopTimerSubscribeTopic(){
            if (timerSubscribeTopic != null) {
                timerSubscribeTopic.cancel();
                timerSubscribeTopic = null;
            }
            if (TimerTaskSubscribeTopic != null) {
                TimerTaskSubscribeTopic.cancel();
                TimerTaskSubscribeTopic = null;
            }
        }
    
        //当活动不再可见时调用
        @Override
        protected void onStop()
        {
            super.onStop();
            stopTimerSubscribeTopic();//停止定时器订阅
        }
    
        /**
         * 当处于停止状态的活动需要再次展现给用户的时候,触发该方法
         */
        @Override
        protected void onRestart() {
            super.onRestart();
            startTimerSubscribeTopic();//定时订阅主题
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            stopTimerSubscribeTopic();
        }
    }

    取消订阅

      

    接收消息

      

            MyMqttClient.sharedCenter().setOnServerReadStringCallback(new MyMqttClient.OnServerReadStringCallback() {
                @Override//Topic:主题  Msg.toString():接收的消息  MsgByte:16进制消息
                public void callback(String Topic, MqttMessage Msg, byte[] MsgByte) {
                    Log.e("MqttMsg", "Topic: "+Topic+" Msg"+Msg.toString() );
                }
            });

     

    测试接收消息

      一,打开MQTT调试助手

        

        

    注:后面的为接收到的16进制消息

     

    发布字符串消息

     MyMqttClient.sharedCenter().setSendData("2222","msg",0,false);//发送字符串消息
      2222:发布的主题 msg:发布的消息 0:消息等级 false:不需要服务器记录

      

    测试发布字符串消息

      

    发布16进制消息

            byte[] bytes= new byte[2];
            bytes[0] = 0x03;
            bytes[1] = 0x55;
            MyMqttClient.sharedCenter().setSendData("3333",bytes,0,false);

      

     

    监听客户端连接MQTT的状态

      

  • 相关阅读:
    [转]Linux FTP服务配置
    [转]手把手教你nginx下如何增加网站
    [转]linux一键安装web环境全攻略
    CentOS命令
    [转]Response对象的属性和方法
    beforeRouteLeave vue监听返回的使用方法
    ue项目浏览器出现卡顿及崩溃的原因查找与解决方案
    vue中,解决chrome下,的warning, Added nonpassive event listener to a scrollblocking ‘mousewheel‘ event 问题
    npm
    Java线程池使用案例
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/11883204.html
Copyright © 2011-2022 走看看