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的狀態