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