Flutter通过mqtt消费activemq,在android端主要使用插件的方式进行

处理流程

Android端连接MQTT

插件端业务处理

step1:配置插件依赖包

  1. implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
  2. implementation 'com.google.code.gson:gson:2.8.5'
  3. implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
  4. implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
  5. implementation 'androidx.legacy:legacy-support-v4:1.0.0'
  6. implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
  7. implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
  8. implementation 'androidx.recyclerview:recyclerview:1.0.0'
  9. implementation 'androidx.multidex:multidex:2.0.1'
  10. implementation 'androidx.multidex:multidex-instrumentation:2.0.0'
  11. implementation 'com.google.android.material:material:1.1.0-alpha08'

step2 实现连接方法

  1. class MqttClientPlugin : MethodCallHandler {
  2. override fun onMethodCall(call: MethodCall, result: Result) {
  3. when (call.method) {
  4. "connectMq" -> {
  5. try {
  6. connectToService()
  7. result.success(true)
  8. } catch (e: Exception) {
  9. e.printStackTrace()
  10. result.success(false)
  11. }
  12. }
  13. }
  14. }
  15. private fun connectToService() {
  16. val intent = Intent(context, MqttClientService::class.java)
  17. this.context?.startService(intent)
  18. }
  19. }

step3 实现mqttclient服务

  1. class MqTTClientService : Service {
  2. private val TAG = "ActiveMQ"
  3. val clientId = "any_client_name"
  4. val serverURI = "tcp://192.168.0.201:1883" //replace with your ip
  5. val publishTopic = "outbox"
  6. val subscribeTopic = "TJ Test"
  7. var client: MqttAndroidClient? = null
  8. constructor() : super()
  9. val MY_ACTION = "MY_ACTION"
  10. var _currentV: Int = 0
  11. override fun onBind(intent: Intent?): IBinder? {
  12. return null
  13. }
  14. override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
  15. val myThread = MyThrad()
  16. myThread.start()
  17. return super.onStartCommand(intent, flags, startId)
  18. }
  19. private fun subscribe() {
  20. try {
  21. client?.subscribe(subscribeTopic, 0, IMqttMessageListener { topic, message ->
  22. Log.i("接收到监听的消息:", "${message.payload}")
  23. })
  24. } catch (e: MqttException) {
  25. e.printStackTrace()
  26. }
  27. }
  28. inner class MyThrad : Thread() {
  29. override fun run() {
  30. val connectOptions = MqttConnectOptions()
  31. connectOptions.isAutomaticReconnect = true
  32. client = MqttAndroidClient(this@MqTTClientService.applicationContext, serverURI, clientId)
  33. try {
  34. client?.connect(connectOptions, object : IMqttActionListener {
  35. override fun onSuccess(asyncActionToken: IMqttToken) {
  36. subscribe()
  37. }
  38. override fun onFailure(asyncActionToken: IMqttToken, e: Throwable) {
  39. Log.i("连接错误:", "${e.message}")
  40. }
  41. })
  42. } catch (e: MqttException) {
  43. e.printStackTrace()
  44. }
  45. }
  46. private fun subscribe() {
  47. try {
  48. client?.subscribe(subscribeTopic, 0) { topic, message ->
  49. //通过广播发送监听到的消息
  50. val intent = Intent()
  51. intent.action = MY_ACTION
  52. intent.putExtra("DATAPASSED", message.toString())
  53. sendBroadcast(intent)
  54. }
  55. } catch (e: MqttException) {
  56. e.printStackTrace()
  57. }
  58. }
  59. }
  60. }

step4监听广播

  1. class DevicemanagerPlugin : MethodCallHandler {
  2. constructor(context: Context?, channel: MethodChannel) {
  3. this.context = context
  4. this.channel = channel
  5. initMqtt()
  6. register()
  7. }
  8. private fun register() {
  9. myReceiver = MyReceiver()
  10. val intentFilter = IntentFilter()
  11. intentFilter.addAction("MY_ACTION")
  12. this.context?.registerReceiver(myReceiver, intentFilter)
  13. }
  14. inner class MyReceiver : BroadcastReceiver() {
  15. override fun onReceive(context: Context?, intent: Intent?) {
  16. try {
  17. val value = intent?.getStringExtra("DATAPASSED")
  18. //将监听到的消息,通过methchannel传给flutter
  19. channel?.invokeMethod("receiveMsg", value)
  20. } catch (e: Exception) {
  21. e.printStackTrace()
  22. }
  23. }
  24. }
  25. }

Flutter端业务处理

实现receiveMsg方法

  1. const channel = const MethodChannel("mqttclient");
  2. class _MyHomePageState extends State<MyHomePage> {
  3. @override
  4. void initState() {
  5. registerMethod()
  6. connectActiveMq()
  7. }
  8. void connectActiveMq() async{
  9. if (Platform.isAndroid) {
  10. var result = await Devicemanager.connectMq(API.MQ_URI);
  11. if (result) {
  12. print("mq链接成功");
  13. } else {
  14. print("mq链接失败");
  15. }
  16. }
  17. }
  18. void registerMethod() {
  19. channel.setMethodCallHandler((handler) {
  20. var completer = new Completer<String>();
  21. try {
  22. switch (handler.method) {
  23. case "receiveMsg":
  24. //接收到的消息
  25. var v = handler.arguments;
  26. break;
  27. default:
  28. break;
  29. }
  30. } catch (e) {
  31. print(e);
  32. }
  33. return completer.future;
  34. });
  35. }
  36. }

mqtt连接失败_Flutter通过Mqtt消费ActivieMQ相关推荐

  1. mqtt连接失败_Netty实战:如何让单机下Netty支持百万长连接?

    单机下能不能让我们的网络应用支持百万连接?可以,但是有很多的工作要做.而且要考虑到单机的系统资源消耗能否支撑百万并发 一.操作系统优化 首先就是要突破操作系统的限制. 在Linux平台上,无论编写客户 ...

  2. Mqtt连接失败的种种原因(连接阿里云平台)

    失败出现一:unable to connect to server 这个就是服务的问题 检查这两个地方 查看自己的区 格式要自己对应好 失败出现二:Connection lost 来,宝子,检查一下自 ...

  3. 小程序paho.mqtt连接微消息队列 MQTT 版

    物联网项目现在越来越多,MQTT的使用场景也越来越广泛,同时遇到的技术问题也是越来越复杂. 最近在做一个小程序连接阿里云的微消息队列MQTT版,说实话,通过这次debug,发现阿里的技术文档很多方面不 ...

  4. MQTT client id重复导致连接失败

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/jiuxu3049/article/de ...

  5. MQTT客户端连接服务器协议,mqtt客户端和服务器长连接

    mqtt客户端和服务器长连接 内容精选 换一换 介绍设置客户端和服务器的安全认证方式的相关参数.参数说明:表明与服务器建立链接后,不进行任何操作的最长时间.参数类型:USERSET取值范围:整型,0- ...

  6. emq auth mysql_EMQ X 认证鉴权(一)——基于 MySQL 的 MQTT 连接认证

    前言 安全保护几乎对于所有的项目都是一个挑战,对于物联网项目更是如,自普及应用以来物联网业内已经发生过多起安全事故. 作为物联网通信协议事实标准,MQTT 保持着较高的安全性,提供了多层次的安全设计: ...

  7. ThingsBoard 二次开发之源码分析 5-如何接收 MQTT 连接

    欢迎加入ThingsBoard技术交流群 这里可复制Q群号:69998183 关注"云腾五洲":获取二开ThingsBoard物联网平台演示 交流社区:ThingsKit-Thin ...

  8. NodeMCU 通过MQTT 连接阿里云物联网

    NodeMCU 通过MQTT 连接阿里云物联网 前言: 这是第一个帖子,希望以后所有的东西都能记录在CSDN吧!自己在调试过程中也借鉴了很多人的帖子,这里总结出来,方便以后查阅,也方便他人! 1.No ...

  9. HarmonyOS系统中内核实现MQTT连接华为云的方法

    大家好,今天主要和大家聊一聊,如何使用MQTT连接华为云平台的方法 目录 第一:MQTT通信基本原理 第二:华为IOT平台API 第三:华为IOT平台初始化 第四:设置命令响应函数 第五:数据上传 设 ...

最新文章

  1. 云桌面可附加桌面文件的程序_给我几分钟,还你一个小清新的电脑桌面
  2. button/input链接方式全攻略 [转]
  3. dfs-Rank the Languages
  4. 将python3.7降为3.5_python3.7降至3.5【python cookbook】python访问子字符串
  5. 台式电脑耳机插孔在哪_不到一千元的迷你电脑究竟如何?Intel NUC7CJYH测评来了...
  6. python科学计算笔记(十四)pandas数据过滤、清理、转换
  7. 解决:single failed: For artifact {null:null:null:jar}: The groupId cannot be empty. 把工程依赖的jar包打到入jar中
  8. mysql 分类_MYSQL数据类型分类
  9. UNIX-LINUX编程实践教程-第三章-实例代码注解-ls2
  10. PyQt5笔记(01) -- 创建空白窗体
  11. 5G加速向纵深发展 中国电信联合产业链开展“5G创新终端商用合作行动”
  12. 洛谷—— P1268 树的重量
  13. 在Vs2013下编译FreeCAD0.17源码
  14. weblogic控制台超时时间_WebLogic如何设置session超时时间
  15. 5分钟转换PDF为图片
  16. 计算机没桌面,电脑桌面的计算机图标没了怎么办
  17. linux 挂载ISO镜像文件
  18. python下载收费视频_用Python下载知乎视频,非常实用
  19. Linux学习笔记26——什么是 Shell scripts、shell script练习及讲解
  20. 安装EVA后可能出现无法在EVA输入中文的解决方法

热门文章

  1. Cisco 3550配置DHCP的实际经验
  2. DWZ(JUI) 教程 跨域请求 iframeNavTab
  3. Web API--自定义异常结果的处理
  4. 对struts一点理解总结
  5. php7.3安装yaf扩展
  6. git如何上传所有的新文件
  7. mongoDB3.4主从复制实现(第一种情况亲测)
  8. ELK 之二:ElasticSearch 和Logstash高级使用
  9. layui 上传图片校验
  10. MySQL的登陆错误:ERROR 1049 (42000): Unknown database 'yht'