天天看點

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

說明

  這一節說明一下基礎篇APP源碼裡面MyMqttCilent.java這個檔案的使用

建立工程

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明
ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明
ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

安裝MQTT的jar包

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

      

打開基礎篇第一節測試裡面的APP源碼裡面的工程

  

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

拷貝MyMqttClient.java檔案

  一,拷貝第一節測試裡面的APP源碼裡面的MyMqttClient.java 到目前工程

    

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明
ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明
ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

  二,源碼裡面是使用的手機的IMEI作為了 MQTT的 ClientID

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

  咱呢,這節着重介紹包的使用,是以這個地方咱直接用時間戳作為ClientID就可以了

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

添加上網絡權限

  <uses-permission android:name="android.permission.INTERNET" />
      
ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

連接配接MQTT

  一,根據自己的MQTT伺服器修改

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

  二,控制連接配接

    該代碼寫一次即可,後期斷線自動重連

    MyMqttClient.sharedCenter().setConnect();

         

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

測試

  連接配接上伺服器以後會列印 Connect Success

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

訂閱主題

  MyMqttClient.sharedCenter().setSubscribe("1111",0);//訂閱主題1111,消息等級0      
ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

建議使用定時器訂閱

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

取消訂閱

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

接收消息

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() );
            }
        });      
ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

測試接收消息

  一,打開MQTT調試助手

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明
ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

注:後面的為接收到的16進制消息

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

釋出字元串消息

MyMqttClient.sharedCenter().setSendData("2222","msg",0,false);//發送字元串消息
  2222:釋出的主題  msg:釋出的消息  0:消息等級  false:不需要伺服器記錄
      
ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

測試釋出字元串消息

ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

釋出16進制消息

byte[] bytes= new byte[2];
        bytes[0] = 0x03;
        bytes[1] = 0x55;
        MyMqttClient.sharedCenter().setSendData("3333",bytes,0,false);      
ESA2GJK1DH1K基礎篇: Android實作MQTT封裝源碼使用說明

監聽用戶端連接配接MQTT的狀态

繼續閱讀