Android 使用mqtt实例,包括接收服务器推送以及上传数据到服务器

1、最方便的方法,使用dlc的module连接mqtt

 

步骤、1——导入dlc依赖和module

//dlc_mqttmodule
implementation project(':garbagerecyclebox')//dlc公库
implementation('com.github.DlcAndroidTeam123456:DlcCommonLibrary:1.0.31-simple') {exclude group: 'me.yokeyword', module: 'fragmentation'
}

 

 步骤、2——创建工具方法,调用即可

//        MqttProxy.init(this);//dlc的mqtt类使用
//        MqttMgr.get().publish();//dlc发送mqtt对象
MqttMgr.get().publish(MqttInformation.GDJBHSX_RECEIVE, 0, openBackBean);
public static final String GDJBHSX_RECEIVE = "sdfyhsx_receive/" + DeviceUtil.getAndroidId();
/*** @author : LGQ* @date : 2020/05/18 10* @desc :*/public class MqttProxy {private static Activity activity;public static void init(Context context) {activity = (Activity) context;DlcMqttConnectOptions dlcMqttConnectOptions = new DlcMqttConnectOptions(context,MqttInformation.SERVER_URI, MqttInformation.USER_NAME, MqttInformation.PASS_WORD);
//        MqttMgr.get().addSubscribeTopics(MqttInformation.GDJBHSX_PUSH_APKBG, 0);MqttMgr.get().addSubscribeTopics(MqttInformation.GDJBHSX_PUSH, 0);LgqLogutil.e("主题地址===  "+MqttInformation.GDJBHSX_PUSH);
//        MqttMgr.get().addSubscribeTopics(MqttInformation.GDJBHSX_PUSH_UDCOMPANY, 0);
//        MqttMgr.get().addSubscribeTopics(MqttInformation.GDJBHSX_PUSH_ERRORKE, 0);
//        MqttMgr.get().addSubscribeTopics(MqttInformation.GDJBHSX_PUSH_UPDATEAPK, 0);MqttMgr.get().init(context, dlcMqttConnectOptions, new BaseMqttCallBack() {@Overridepublic void messageArrived(String topic, String message, int messageId) {handleMessageArrived(topic, message, messageId);
//                        ObServernotice.getInstance().notifyObserver(5481,5,message,null);LgqLogutil.e("mqtt注册成功sxxxx00000===   "+message);}@Overridepublic void onSuccess(DlcMqttToken asyncActionToken) {LgqLogutil.e("mqtt注册成功sxxxx");}@Overridepublic void onFailure(DlcMqttException e) {LgqLogutil.e("成功sxxxx1111111");}});}public static void onDestroy() {MqttMgr.get().onDestroy();activity = null;}private static void handleMessageArrived(String topic, String message, int messageId) {try {
//            JSONObject json = new JSONObject(message);
//            String typeName = json.getString("topic");LgqLogutil.e("返回数据====="+message);
//            switch (typeName) {
//
//            }} catch (Exception e) {e.printStackTrace();}Log.e("))))))))))))", "topic:" + topic + ",message:" + message + ",messageId:" + messageId);}
}

 

 2、使用原生mqtt类实现mqtt推送以及上报数据

 

 步骤、1——创建工具方法,调用即可

 

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
//        MqttProxy.init(this);//dlc的mqtt类使用
//        MqttMgr.get().publish();//dlc发送mqtt对象initMqtt();//原生mqtt类使用}private void initMqtt() {Looper.get().looper();}}

 、、、、、、、、其余工具方法下载demo复制即可、、、、、、、、、、、、、、

 

/*** author:   meixi* Date:     2020/8/28* Desc:     mqtt初始化,心跳相关*/
public class Looper {private static class LooperHolder {static final Looper INSTANCE = new Looper();}public static Looper get() {return Looper.LooperHolder.INSTANCE;}private Looper() {//启动mqttDlcMqttConnectOptions mqttOption = new DlcMqttConnectOptions(App.sInstance, "tcp://120.77.72.190:18", "dlc", "123456", App.deviceId);mqttOption.setAutoReconnect(true);MqttManager.get().init(App.sInstance, mqttOption, new DLCMqttCallBack());MqttManager.get().subscribe(new String[]{"xmshzthg_toapk/" + App.deviceId, "xmshzthg_toapk/common"}, new int[]{0, 0});}@SuppressLint("CheckResult")public void looper() {Observable.interval(2, 30, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Long>() {@Overridepublic void accept(Long aLong) {HeartbeatBean heartBean = App.heartBeatData;if (heartBean == null) {LogPlus.i("心跳数据为空,不做心跳上传");return;}heartBean.timestamp = getTime();heartBean.macno = App.deviceId;LogPlus.i("lgq", "温度--c111-上传心跳-  ");MqttManager.get().publish("xmshzthg_toback/" + App.deviceId, 0, heartBean);//todo 待验证,防止开始有心跳后来没心跳的情况,一直发送发送上一次的数据,导致异常在线状态的出现}});}public String getTime() {long time = System.currentTimeMillis() / 1000;//获取系统时间的10位的时间戳String str = String.valueOf(time);return str;}}

 

demo下载链接: https://download.csdn.net/download/meixi_android/12767464

云盘下载:https://pan.baidu.com/s/1Nl9aQW-l3SxSlwWdd60uew

在线bug交流:扣扣1085220040 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

18-Flutter移动电商实战-首页_火爆专区商品接口制作

1、获取接口的方法 在service/service_method.dart里制作方法。我们先不接收参数&#xff0c;先把接口调通。 Future getHomePageBeloConten() async{try{print(开始获取下拉列表数据.................);Response response;Dio dio new Dio();dio.options.contentTypeConten…

IIS Server Farms入门

概念了解 IIS Server Farms&#xff0c;实际上应该叫“Microsoft Web Farm Framework (WFF)”&#xff0c;依赖于“Web Platform Installer”才能安装&#xff0c;依赖于WebDeploy组件。可参见 Web Farm Framework Setting up a Server Farm with the Web Farm Framework 2.0 f…

flutter中的异步机制Future

饿补一下Flutter中Http请求的异步操作。 Dart是一个单线程语言&#xff0c;可以理解成物理线路中的串联&#xff0c;当其遇到有延迟的运算&#xff08;比如IO操作、延时执行&#xff09;时&#xff0c;线程中按顺序执行的运算就会阻塞&#xff0c;用户就会感觉到卡顿&#xff0…

前端学习(2825):vs开发小程序的插件

推荐以下四个插件 wechat-snippet 微信小程序代码辅助,代码片段自动完成minapp 微信小程序标签、属性的智能补全&#xff08;同时支持原生小程序、mpvue 和 wepy 框架&#xff0c;并提供 snippets&#xff09; 需要输入<才会触发标签补全 输入空格会触发对应标签的属性补全…

软件工程导论团队项目

软件工程导论团队项目&#xff08;速课小龙&#xff09; 一&#xff0e;团队介绍 1.团队成员 邓 旭 2016012068 &#xff08;组长&#xff09; 陈逸璇 2016012056 周紫伊 2016012043 谢月鹏 2016012066 洪泽芳 2016011988 葛金星 2016011992 2.队名&#xff1a;速课小龙 3.项…

java.util.ConcurrentModificationException

Android使用ArrayLists时报错&#xff1a;java.util.ConcurrentModificationException 报错原因是同一个集合被多个线程编辑了。导致集合元素丢失 解决方法—— 1、改有CopyOnWriteArrayList private List<MqttMsgBean> mqttMsgList new CopyOnWriteArrayList<>…

工作272:上传部分代码优化之两种上传视频的方式

两种预览视频的方式 <!--<div style"width: 500px;height: 400px" align"center"><iframe height498 width510 srchttp://xcom/uploads/2020-12-23/20201223125205_636.mp4 frameborder0 allowfullscreen></iframe></div>-->…

面试必备:HashMap、Hashtable、ConcurrentHashMap的原理与区别

本文转载自 夏雪冬日&#xff1a;https://www.cnblogs.com/heyonggang/p/9112731.html 在实际面试过程中出现集合 Map 的概率接近 100%&#xff0c;可见不背上个 Map 相关的题目都不好意思去面试了。 如果你去面试&#xff0c;面试官不问你这个问题&#xff0c;你来找我^_^ 下…

tomcat,eclipse,sts绿色运行

D:\apache-tomcat-8.5.29\bin\setclasspath.bat 最开始处设置&#xff0c;可以是相对路径 set JAVA_HOMED:\Program Files\jdk1.8.0_131set JRE_HOMED:\Program Files\jdk1.8.0_131\jre 类eclipse配置文件 sts.ini -startup plugins/org.eclipse.equinox.launcher_1.4.0.v20161…

Android 设备启动时,APP应用自启动

添加一个开机监听即可 <!--开机广播权限--> <uses-permission android:name"android.permission.RECEIVE_BOOT_COMPLETED" /> public class BootReceiver extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) …

Eclipse中将java类打成jar包形式运行

记录一次帮助小伙伴将java类打成jar包运行 1、创建java project项目 file > new > project > java project 随便起一个项目名称&#xff0c;finish 完成后项目结构如下&#xff1a; 2、植入java类 将准备好的java类&#xff0c;植入项目中&#xff0c;在 src 目录中…

工作274:ele-图标使用

/*各个路由模块的建立*/ import Home from "/views/Home/Home"; import GlobalLayout from "/layout/GlobalLayout"; import Login from "/views/login/Login"; import Check from "/views/login/Check"; const SYSTEM_MANAGEMENT &q…

串口开发,数据类型转换——字符串转 byte[],byte[]转二进制,二进制转十进制转byte[],byte[]转十进制,byte[]拼接,校验

bytez转String /*** 字节数组转换成对应的16进制表示的字符串** param src* return*/ public static String bytes2HexStr(byte[] src) {StringBuilder builder new StringBuilder();if (src null || src.length < 0) {return "";}char[] buffer new char[2];…

Problem Collection II 构造

ARC 093B 转载于:https://www.cnblogs.com/Patt/p/8727324.html

了解栈内存堆内存

由于 java 有垃圾回收机制&#xff0c;所以往往不太会去关注栈堆的内存分配问题&#xff0c;直至OOM 一、了解栈堆概念 1、堆【存储对象创建实例】 程序开始运行时&#xff0c;JVM从OS获取一些内存&#xff0c;部分是堆内存。堆内存通常在存储地址的底层&#xff0c;向上排列…

dataBinding和retrofit的使用

1、dataBinding使用方法 1、配置dataBinding 2、创建layout类型xml布局文件 3、即可引用 ActivityMainBinding mainBinding; mainBinding DataBindingUtil.setContentView(this, R.layout.activity_main); mainBinding.testte.setText("abcccc"); 2、retrofit的…

使多个线程循环输出0-99-0-99

直接上代码&#xff0c;后面我也有一个问题&#xff0c;关于对象的notifyAll或者notify或者single或者singleAll&#xff0c;唤醒线程是顺序唤醒吗&#xff0c;我这里都是顺序输出了 关于公平与非公平锁的问题&#xff1f;唤醒是公平的&#xff1f;&#xff1f;&#xff1f;又没…

66-Flutter移动电商实战-会员中心_编写ListTile的通用方法

1、界面分析 通过下图我们可以拆分成 4 部分&#xff0c;头部、订单标题区域、订单列表区域、ListTitle同用部分。 2、UI编写 2.1、头部 主要用到了圆形头像裁剪组件-ClipOval 顶部头像区域Widget _topHeader(){ return Container( width: ScreenUtil().setWidth(750), …

Android板实现双屏显示,DisplayManager和Display的使用

非常简单。 效果 1、创建分屏管理类 DisplayController public class DisplayController {public static Display getTargetDisplay() {DisplayManager displayManager (DisplayManager) App.getInstance().getSystemService(Context.DISPLAY_SERVICE);Display[] presentat…