ESA2GJK1DH1K基础篇: Android实现MQTT封装源码使用说明

 

 

 

 

说明

  这一节说明一下基础篇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的状态

  

 

posted on 2019-11-18 16:48  广源时代  阅读(2696)  评论(2编辑  收藏  举报

导航

支付宝 QQ群