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成功
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封装源码使用说明的更多相关文章
- ESA2GJK1DH1K基础篇: Android连接MQTT简单的Demo
题外话 我老爸也问我物联网发展的趋势是什么!!!!!! 我自己感觉的:(正在朝着 "我,机器人" 这部电影的服务器方向发展) 以后的设备都会和服务器交互,就是说本地不再做处理,全部 ...
- ESA2GJK1DH1K基础篇: 移植官方MQTT包,让TCP实现MQTT功能(以GPRS模块为例)
前言 这节代码将在这一节的基础上实现 拷贝第一节测试里面的MQTT文件夹到当前工程 当前工程建个MQTT的文件夹,用于存放那个MQTT文件夹里面的内容 添加文件到里面 注意:::: 实际源码拷贝位置 ...
- ESA2GJK1DH1K基础篇: Android实现SmartConfig简单Demo
下载源码去 百度安信可 导入源码 等待加载完 我的提示更新下软件 ,我就更新下 安装完成以后重新导入工程 安装到手机 注意,由于Android 9.0 以后的获取WIFI名称需要打开GPS,所以如果提 ...
- 一、基础篇--1.2Java集合-HashMap源码解析
https://www.cnblogs.com/chengxiao/p/6059914.html 散列表 哈希表是根据关键码值而直接进行访问的数据结构.也就是说,它能通过把关键码值映射到表中的一个位 ...
- ESA2GJK1DH1K微信小程序篇: 小程序实现MQTT封包源码使用说明
说明 我为了后期能够快速的让小程序实现MQTT,我做了一个MQTT的封装. 功能的封装有助于后期快速的开发,还方便咱维护. 我后期的所有代码皆使用此封装库, 这一节,我就详细的介绍我封装的MQTT.j ...
- Java多线程系列 基础篇09 Object.wait/notifyJVM源码实现
转载 https://www.jianshu.com/p/f4454164c017 作者 占小狼 最简单的东西,往往包含了最复杂的实现,因为需要为上层的存在提供一个稳定的基础,Object作为java ...
- Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)
一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk 主要采用的是静态方式,步骤也很简单,首先使用 ...
- Android 自定义View及其在布局文件中的使用示例(三):结合Android 4.4.2_r1源码分析onMeasure过程
转载请注明出处 http://www.cnblogs.com/crashmaker/p/3549365.html From crash_coder linguowu linguowu0622@gami ...
- Android -- 带你从源码角度领悟Dagger2入门到放弃(二)
1,接着我们上一篇继续介绍,在上一篇我们介绍了简单的@Inject和@Component的结合使用,现在我们继续以老师和学生的例子,我们知道学生上课的时候都会有书籍来辅助听课,先来看看我们之前的Stu ...
随机推荐
- layer弹出框,zIndex不断增加的问题
针对layer弹出框每次进行弹出操作时z-index不断加1的问题,手动设置过zIndex值不管用,每次关闭时清空layer对象也不管用. 解决办法: 修改layer.js,,将红框代码改为绿框代码, ...
- Appium+python自动化(五)- 模拟器(超详解)
简介 Appium是做安卓自动化的一个比较流行的工具,对于想要学习该工具但是又局限于或许当前有些小伙伴没 android 手机来说,可以通过安卓模拟器来解决该问题,下面就讲解使用appium连接安卓模 ...
- 前端学习:学习笔记(CSS部分)
前端学习:学习笔记(CSS部分) CSS的学习总结(图解) CSS的引入方式和书写规范 CSS的插入方式_内嵌样式 <!DOCTYPE html> <html> <hea ...
- Redis(八) LRU Cache
Redis(八)-- LRU Cache 在计算机中缓存可谓无所不在,无论还是应用还是操作系统中,为了性能都需要做缓存.然缓存必然与缓存算法息息相关,LRU就是其中之一.笔者在最先接触LRU是大学学习 ...
- Sharding-Jdbc源码探究-读写分离
1. Sharding-Jdbc源码探究-读写分离 1.1. 主入口 找到源码入口 这一个类围绕了springboot配置属性的加载,加载了spring.shardingsphere.datasour ...
- (转)牛牛牌型判定(五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛>没牛)
牌型大小: 五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛(牛987654321) > 没牛,K > Q > J ……2 > A, 黑 ...
- 高性能TcpServer(Python) - SocketServer
源码下载 -> 提取码 QQ:505645074 程序结构图 测试截图 1. 正常接收测试 2. 并发测试
- Elasticasearch Web管理工具-Cerebro
cerebro是一个使用Scala,Play Framework,AngularJS和Bootstrap构建的开源(MIT许可)elasticsearch web管理工具.需要Java 1.8或更高版 ...
- 简要分析一下java中线程的生命周期
面试题:您了解线程吗?简单叙述一下线程的生命周期? 答:之前学过一些有关于线程方面的知识,并且在编写代码的过程中还是要经常考虑线程,所以,我对线程还是了解一点的. 首先,创建一个线程,线程进入初始状态 ...
- Semaphore的简介及应用场景
Semaphore是一个计数信号量,常用于限制可以访问某些资源(物理或逻辑的)线程数目. 常用函数: 信号量的构造函数 非公平: public Semaphore(int permits);//per ...