ESA2GJK1DH1K基础篇: Android实现MQTT封装源码使用说明

  • 2019 年 11 月 20 日
  • 笔记

说明

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

为避免重复内容,这一节利用上一节的工程作为这一节的工程

  后面所说的当前工程即本节的工程.

打开上一节的工程,作为本节工程

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

拷贝MyMqttClient.java文件

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

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

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

连接MQTT

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

  二,控制连接

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

MyMqttClient.sharedCenter().setConnect();

订阅主题

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();//连接MQTT            /**           * 订阅主题成功回调           */          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();//停止定时器订阅      }  }

取消订阅

接收消息

        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() );              }          });

发布消息

  一,发送字符串

  二,发送16进制

监听客户端连接MQTT的状态