說明
這一節說明一下基礎篇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);