说明

  这一节说明一下基础篇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成功
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
}
};
}
if(timerSubscribeTopic != null && TimerTaskSubscribeTopic != null )
timerSubscribeTopic.schedule(TimerTaskSubscribeTopic, , );
} 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[];
bytes[] = 0x03;
bytes[] = 0x55;
MyMqttClient.sharedCenter().setSendData("",bytes,,false);

  

监听客户端连接MQTT的状态

  

ESA2GJK1DH1K基础篇: Android实现MQTT封装源码使用说明的更多相关文章

  1. ESA2GJK1DH1K基础篇: Android连接MQTT简单的Demo

    题外话 我老爸也问我物联网发展的趋势是什么!!!!!! 我自己感觉的:(正在朝着 "我,机器人" 这部电影的服务器方向发展) 以后的设备都会和服务器交互,就是说本地不再做处理,全部 ...

  2. ESA2GJK1DH1K基础篇: 移植官方MQTT包,让TCP实现MQTT功能(以GPRS模块为例)

    前言 这节代码将在这一节的基础上实现 拷贝第一节测试里面的MQTT文件夹到当前工程 当前工程建个MQTT的文件夹,用于存放那个MQTT文件夹里面的内容 添加文件到里面 注意:::: 实际源码拷贝位置 ...

  3. ESA2GJK1DH1K基础篇: Android实现SmartConfig简单Demo

    下载源码去 百度安信可 导入源码 等待加载完 我的提示更新下软件 ,我就更新下 安装完成以后重新导入工程 安装到手机 注意,由于Android 9.0 以后的获取WIFI名称需要打开GPS,所以如果提 ...

  4. 一、基础篇--1.2Java集合-HashMap源码解析

    https://www.cnblogs.com/chengxiao/p/6059914.html  散列表 哈希表是根据关键码值而直接进行访问的数据结构.也就是说,它能通过把关键码值映射到表中的一个位 ...

  5. ESA2GJK1DH1K微信小程序篇: 小程序实现MQTT封包源码使用说明

    说明 我为了后期能够快速的让小程序实现MQTT,我做了一个MQTT的封装. 功能的封装有助于后期快速的开发,还方便咱维护. 我后期的所有代码皆使用此封装库, 这一节,我就详细的介绍我封装的MQTT.j ...

  6. Java多线程系列 基础篇09 Object.wait/notifyJVM源码实现

    转载 https://www.jianshu.com/p/f4454164c017 作者 占小狼 最简单的东西,往往包含了最复杂的实现,因为需要为上层的存在提供一个稳定的基础,Object作为java ...

  7. Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

    一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用 ...

  8. Android 自定义View及其在布局文件中的使用示例(三):结合Android 4.4.2_r1源码分析onMeasure过程

    转载请注明出处 http://www.cnblogs.com/crashmaker/p/3549365.html From crash_coder linguowu linguowu0622@gami ...

  9. Android -- 带你从源码角度领悟Dagger2入门到放弃(二)

    1,接着我们上一篇继续介绍,在上一篇我们介绍了简单的@Inject和@Component的结合使用,现在我们继续以老师和学生的例子,我们知道学生上课的时候都会有书籍来辅助听课,先来看看我们之前的Stu ...

随机推荐

  1. Loj #3102. 「JSOI2019」神经网络

    Loj #3102. 「JSOI2019」神经网络 题目背景 火星探险队发现,火星人的思维方式与人类非常不同,是因为他们拥有与人类很不一样的神经网络结构.为了更好地理解火星人的行为模式,JYY 对小镇 ...

  2. PyQt5笔记之布局管理

    代码:界面与逻辑分离 这是使用Designer做出的GUI,然后通过转换得到的Py代码.(界面文件) # -*- coding: utf-8 -*- # Form implementation gen ...

  3. 【FPGA】Verilog实现交通信号灯

    大二数字电路的课程设计中,有一份日常作业使用Xilinx FPGA实现简易交通信号灯,但很可惜当时时间有限,没能最终完成.正好在这一学期选修SOPC设计课程,同样采用了Xilinx FPGA,故打算重 ...

  4. Prometheus PromSQL 获取系统服务运行状态

    Prometheus PromSQL 获取系统服务运行状态 使用systemd收集器:--collector.systemd.unit-whitelist=".+" 从system ...

  5. 【题解】邻值查找 [CH1301]

    [题解]邻值查找 [CH1301] 传送门:邻值查找 \([CH1301]\) \([AcWing136]\) [题目描述] 给定一个长度为 \(n\) 的序列 \(A\),\(A\) 中的数各不相同 ...

  6. JAVA设计模式工厂模式

    工厂模式: – 实现了创建者和调用者的分离. – 详细分类: • 简单工厂模式 • 工厂方法模式 • 抽象工厂模式• 面向对象设计的基本原则: – OCP(开闭原则,Open-Closed Princ ...

  7. Java集合Map基本方法

    jdk1.7 api中的方法摘要: 参考java集合大全图:https://www.cnblogs.com/xkzhangsanx/p/10889114.html Map为所有Map子类的接口.

  8. web-api POST body object always null

      If the any of values of the request's JSON object are not the same type as expected by the service ...

  9. logger(一)slf4j简介及其实现原理

    一.slf4j简介 slf4j(Simple logging facade for Java)是对所有日志框架制定的一种规范.标准.接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体 ...

  10. Spark GraphX图计算核心算子实战【AggreagteMessage】

    一.简介 参考博客:https://www.cnblogs.com/yszd/p/10186556.html 二.代码实现 package graphx import org.apache.log4j ...