ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

202-STM32+BC26基本控制篇-移植使用-移植AndroidMQTT底层包到自己的工程项目

2020-12-17 02:01:24  阅读:147  来源: 互联网

标签:订阅 202 AndroidMQTT void MyMqttClient Override sharedCenter null 移植


<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLBC26AA/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

<iframe frameborder="0" height="1500" name="ifd" scrolling="auto" src="https://mnifdv.cn/resource/cnblogs/ZLBC26AA/" width="100%"></iframe>

 

新建工程

 

 

 

 

 

 

 

 

 

 

安装MQTT的Jar包

1.第一种方式

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

 

 

 

 

2.第二种,我准备好了jar包,可以直接导入 jar包

 

 

拷贝到自己工程的libs里面

 

 

 

 

 

 

 

 

把MyMqttClient.java 文件放到自己的工程

 

 

1.修改MQTT信息

 

 

 

 

2,增加网络权限

<uses-permission android:name="android.permission.INTERNET" />

 

 

 

 

 

连接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();

        /**
         * 订阅主题成功回调
         */
        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().setUnSubscribe("1111");//取消订阅主题1111

 

 

接收消息

哪个文件需要获取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() );
            }
        });

 

 

发布消息

1.发布字符串消息

MyMqttClient.sharedCenter().setSendData("2222","msg",0,false);//发送字符串消息

2222:发布的主题 msg:发布的消息 0:消息等级 false:不需要服务器记录

 

 

2.发布16进制消息

byte[] bytes= new byte[2];

bytes[0] = 0x03;

bytes[1] = 0x55;

MyMqttClient.sharedCenter().setSendData("3333",bytes,0,false);

 

 

监听MQTT连接状态

/*连接上MQTT*/
        MyMqttClient.sharedCenter().setOnServerConnectedCallback(new MyMqttClient.OnServerConnectedCallback() {
            @Override
            public void callback() {

            }
        });
        /*和MQTT服务器断开连接*/
        MyMqttClient.sharedCenter().setOnServerDisConnectedCallback(new MyMqttClient.OnServerDisConnectedCallback() {
            @Override
            public void callback(Throwable e) {

            }
        });

 

标签:订阅,202,AndroidMQTT,void,MyMqttClient,Override,sharedCenter,null,移植
来源: https://www.cnblogs.com/yangfengwu/p/14147621.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有