一、lib下载

1,服务的lib
org.eclipse.paho.android.service-1.1.1.jar
2,客户端的lib
org.eclipse.paho.client.mqttv3-1.2.5.jar

二、新建Android Studio 项目

我是用的是 Android Studio4.1.1版本,如下图所示。
1,
2,新建一个Empty Activity
3,MQTTDemo 命名,点击完成。

3,把下载的lib库文件放在项目 C:\Users\Administrator\MQTTDEMO\app\libs 目录下面。
我的项目在C:\Users\Administrator\MQTTDEMO文件夹下面,根据实际情况选择文件夹。

4,添加为lib,右键单击文件,然后点击 Add As Library。

成功后的如图所示,左边出现一个三角形可以展开。

三、修改配置信息(非常重要配置错误无法实现)

1,在项目视图的情况下,修改 工程的 build.gradle,添加一句。
在工程build.gradle中,添加Paho仓库地址

        maven {url "https://repo.eclipse.org/content/repositories/paho-snapshots/"}

结果如图所示

2,为了使App能够绑定到Paho Android Service,需要在AndroidManifest.xml中添加以下信息

    <!--权限--><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_PHONE_STATE" />

声明以下服务:

<!-- Mqtt Service -->
<service android:name="org.eclipse.paho.android.service.MqttService">
</service>

四、绘制控件

由于各个项目所需要显示的结果不同,这个项目在画控件的方面仅仅只是给helloword 的id命名为 : txthello。

五,写代码

如下图所示,代码在我本机是调试好之后贴上来的,如果无法运行,则看下配置文件。
我会把整个项目打包上传。

package com.example.mqttdemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;import com.google.android.material.snackbar.Snackbar;import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;public class MainActivity extends AppCompatActivity {private String string_IMEI_ID = "WPGMQTTDemo";private String host = "tcp://broker.emqx.io:1883";//    private String userName = "admin";
//    private String passWord = "public";private MqttClient mqttClient;//客户端private MqttConnectOptions options;//配置  保存控制客户端连接到服务器的方式的选项集。TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.txthello);//初始化MQTT服务器连接配置Initialization_MQTT();//连接MQTT服务器ConnMqttBroken(true);}/*  初始化配置Mqtt  */private void Initialization_MQTT() {try {//(1)主机地址(2)客户端ID,一般以客户端唯一标识符(不能够和其它客户端重名)(3)最后一个参数是指数据保存在内存(具体保存什么数据,以后再说,其实现在我也不是很确定)mqttClient = new MqttClient(host, string_IMEI_ID, new MemoryPersistence());} catch (MqttException e) {e.printStackTrace();}options = new MqttConnectOptions();//MQTT的连接设置options.setCleanSession(true);//设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接
//        options.setUserName(userName);//设置连接的用户名(自己的服务器没有设置用户名)
//        options.setPassword(passWord.toCharArray());//设置连接的密码(自己的服务器没有设置密码)mqttClient.setCallback(new MqttCallback() {@Override//连接丢失后,会执行这里public void connectionLost(Throwable throwable) {}@Override//获取的消息会执行这里--arg0是主题,arg1是消息public void messageArrived(final String ssr, MqttMessage mqttMessage) throws Exception {final String mqtt_zhuti = ssr;//主题final String mqtt_message = mqttMessage.toString();//消息runOnUiThread(new Runnable() {//public void run() {Toast.makeText(getApplicationContext(), "主题:" + ssr + "消息:" + mqtt_message, Toast.LENGTH_SHORT).show();}});}@Override//订阅主题后会执行到这里public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {}});}//连接断开MQTTprivate void ConnMqttBroken(boolean bloConn) {// 必须开启新的线程执行new Thread(new Runnable() {@Overridepublic void run() {if (bloConn) {try {if (mqttClient.isConnected() == false) {mqttClient.connect(options);//连接服务器,连接不上会阻塞在这}Snackbar.make(textView, "连接成功!", Snackbar.LENGTH_SHORT).show();} catch (MqttException e) {e.printStackTrace();Snackbar.make(textView, "连接失败!", Snackbar.LENGTH_SHORT).show();}} else {try {if (mqttClient.isConnected()) {mqttClient.disconnect();}Snackbar.make(textView, "断开成功!", Snackbar.LENGTH_SHORT).show();} catch (MqttException e) {e.printStackTrace();Snackbar.make(textView, "断开失败!", Snackbar.LENGTH_SHORT).show();}}}}).start();}
}

以上就是写一个Android MQTT的步骤。
如果喜欢,请关注我哦,会分享自己学习的过程。
安卓MQTT实现项目

一步步实现Android MQTT详细步骤,附工程文件相关推荐

  1. android系统的iphone,iPhone上安装Android系统详细步骤。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在iphone安装android系统的详细步骤 首先,准备好iphone的多点触屏和wlan固件.因为法律的缘故,我们不能分享这些文件,你可以去ipsw文 ...

  2. iphone和android系统,iPhone上安装Android系统详细步骤。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在iphone安装android系统的详细步骤 首先,准备好iphone的多点触屏和wlan固件.因为法律的缘故,我们不能分享这些文件,你可以去ipsw文 ...

  3. iphone装android,iPhone上安装Android系统详细步骤。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在iphone安装android系统的详细步骤 首先,准备好iphone的多点触屏和wlan固件.因为法律的缘故,我们不能分享这些文件,你可以去ipsw文 ...

  4. 线性电路特性的研究与multisim仿真(附工程文件)

    目录 4.1  实验目的 4.2  实验原理 4.3  实验内容与步骤 4.4  实验要求与注意事项 4.5  实验报告与思考题 4.1  实验目的 1. 加深对线性电路主要特性(齐次性.叠加性.置换 ...

  5. 基尔霍夫定律的验证与multisim仿真(附工程文件)

    目录 3.1  实验目的 3. 2  实验原理 3. 3  实验内容与步骤 3.4  实验要求与注意事项 3.5 实验报告与思考题 3.1  实验目的 1. 加深对基尔霍夫定律的理解: 2. 学会使用 ...

  6. Python基于机器学习的文本情感分析详细步骤[附代码和文字解释]

    最近在研究情感分析,感谢CSDN上很多博主的文章,让我受益匪浅.因此在跑出准确率高达88%的分类结果后,写下自己的代码和总结,希望对大家有所帮助~ 目录 一.文本数据预处理 1.读取json并转化为列 ...

  7. 大学生创新创业训练计划项目——无线充电装置(附工程文件)

    无线充电装置说明书及使用报告 一.产品简介 本产品是一款便携式大容量无线充电装置,充电高度可低至1CM.采用STM32F103C6T6微控制芯片作为主控.3节18650锂电池对整套装置进行供电,用OL ...

  8. 用Python自带的tkinter制作一款简易音乐播放器(附工程文件)

    tkinter GUI 界面: 基于tkinter库实现简易可视化界面,并调用pygame等第三方库实现播放歌曲.切换歌曲.歌曲进度调整.批量导入曲库等基本功能:程序设置为单曲循环模式,需要手动切换歌 ...

  9. Unity自定义快捷键功能,支持动态改键(附工程文件)

    简单的按键输入检测就是在Update里通过对 if(Input.GetKeyDown(KeyCode.A)){ //todo } 这样来判断,但是项目的需求中往往没有这么简单,都是需要支持用户自己修改 ...

最新文章

  1. 7个让你惊叹的HTML技巧
  2. PM配置详解之三:维护计划、工作中心、作业列及产品资源与工具
  3. 产品网络推广浅析网站在优化时文章标题撰写要注意哪些事项?
  4. C++/CLI思辨录之代理构造函数
  5. python算方差_python计算均值方差
  6. 设计总结:腾讯光子《和平精英》全新UI 2.0如何升级至效果拉满?
  7. 定制kali linux
  8. phpcms发布新闻到数据库_如何利用PHPCMS调用新闻列表
  9. c++ cdi+示例_C ++'not'关键字和示例
  10. linux系统更新失败处理功能,Proxmox VE升级apt-get update失败处理 | linux运维小站–linux系统架构_服务器运维_Linux运维工程师工作手札...
  11. java 龟兔赛跑预测_[Java] 蓝桥杯BASIC-24 基础练习 龟兔赛跑预测
  12. 学python能做什么类型的工作-最适合学Python的几类人,有你吗?
  13. C++ Make、Makefile、CMake和CMakeLists关系
  14. HP P2000 G3阵列故障经历
  15. Ajax框架(14个开源的)
  16. Landsat8处理小工具(python)
  17. 数据库实验一:创建数据库和表
  18. QCC3071与QCC3072有什么区别?
  19. socket写超时c语言,设置socket超时时间
  20. 打印1000-2000年的闰年

热门文章

  1. 「划线高亮」和「插入笔记」—— 不止是前端知识点
  2. Linux串口信息查询
  3. 随手记录第六话 -- 在Mac上搭建整个开发环境记录(Java、Python、Vue、Docker、idea)
  4. 二维码(QRcode)容量的计算与版本
  5. 【中科蓝讯AB532X】自定义按键处理函数的实现
  6. Mni2440 linux PWM 驱动代码修改支持 频率,占空比修改--XiaoLin.Peng
  7. 计算机英语考试试题一附答案,计算机英语考试试题一附答案.doc
  8. 初学oracle--join的整体实例说明
  9. 关于“继承, 子类拥有父类非private的属性和方法“
  10. window.close的解决方法