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的状态
