說明
這一節說明一下基礎篇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的狀態