mqtt连接失败_Flutter通过Mqtt消费ActivieMQ
Flutter通过mqtt消费activemq,在android端主要使用插件的方式进行
处理流程
Android端连接MQTT
插件端业务处理
step1:配置插件依赖包
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.multidex:multidex-instrumentation:2.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha08'
step2 实现连接方法
class
MqttClientPlugin
:
MethodCallHandler
{
override fun onMethodCall(call:
MethodCall, result:
Result)
{
when
(call.method)
{
"connectMq"
->
{
try
{
connectToService()
result.success(true)
}
catch
(e:
Exception)
{
e.printStackTrace()
result.success(false)
}
}
}
}
private fun connectToService()
{
val intent =
Intent(context,
MqttClientService::class.java)
this.context?.startService(intent)
}
}
step3 实现mqttclient服务
class
MqTTClientService
:
Service
{
private val TAG =
"ActiveMQ"
val clientId =
"any_client_name"
val serverURI =
"tcp://192.168.0.201:1883"
//replace with your ip
val publishTopic =
"outbox"
val subscribeTopic =
"TJ Test"
var client:
MqttAndroidClient?
=
null
constructor()
:
super()
val MY_ACTION =
"MY_ACTION"
var _currentV:
Int
=
0
override fun onBind(intent:
Intent?):
IBinder?
{
return
null
}
override fun onStartCommand(intent:
Intent?, flags:
Int, startId:
Int):
Int
{
val myThread =
MyThrad()
myThread.start()
return
super.onStartCommand(intent, flags, startId)
}
private fun subscribe()
{
try
{
client?.subscribe(subscribeTopic,
0,
IMqttMessageListener
{ topic, message ->
Log.i("接收到监听的消息:",
"${message.payload}")
})
}
catch
(e:
MqttException)
{
e.printStackTrace()
}
}
inner class
MyThrad
:
Thread()
{
override fun run()
{
val connectOptions =
MqttConnectOptions()
connectOptions.isAutomaticReconnect =
true
client =
MqttAndroidClient(this@MqTTClientService.applicationContext, serverURI, clientId)
try
{
client?.connect(connectOptions,
object
:
IMqttActionListener
{
override fun onSuccess(asyncActionToken:
IMqttToken)
{
subscribe()
}
override fun onFailure(asyncActionToken:
IMqttToken, e:
Throwable)
{
Log.i("连接错误:",
"${e.message}")
}
})
}
catch
(e:
MqttException)
{
e.printStackTrace()
}
}
private fun subscribe()
{
try
{
client?.subscribe(subscribeTopic,
0)
{ topic, message ->
//通过广播发送监听到的消息
val intent =
Intent()
intent.action = MY_ACTION
intent.putExtra("DATAPASSED", message.toString())
sendBroadcast(intent)
}
}
catch
(e:
MqttException)
{
e.printStackTrace()
}
}
}
}
step4监听广播
class
DevicemanagerPlugin
:
MethodCallHandler
{
constructor(context:
Context?, channel:
MethodChannel)
{
this.context = context
this.channel = channel
initMqtt()
register()
}
private fun register()
{
myReceiver =
MyReceiver()
val intentFilter =
IntentFilter()
intentFilter.addAction("MY_ACTION")
this.context?.registerReceiver(myReceiver, intentFilter)
}
inner class
MyReceiver
:
BroadcastReceiver()
{
override fun onReceive(context:
Context?, intent:
Intent?)
{
try
{
val value = intent?.getStringExtra("DATAPASSED")
//将监听到的消息,通过methchannel传给flutter
channel?.invokeMethod("receiveMsg", value)
}
catch
(e:
Exception)
{
e.printStackTrace()
}
}
}
}
Flutter端业务处理
实现receiveMsg方法
const channel =
const
MethodChannel("mqttclient");
class
_MyHomePageState
extends
State<MyHomePage>
{
@override
void initState()
{
registerMethod()
connectActiveMq()
}
void connectActiveMq()
async{
if
(Platform.isAndroid)
{
var result =
await
Devicemanager.connectMq(API.MQ_URI);
if
(result)
{
print("mq链接成功");
}
else
{
print("mq链接失败");
}
}
}
void registerMethod()
{
channel.setMethodCallHandler((handler)
{
var completer =
new
Completer<String>();
try
{
switch
(handler.method)
{
case
"receiveMsg":
//接收到的消息
var v = handler.arguments;
break;
default:
break;
}
}
catch
(e)
{
print(e);
}
return completer.future;
});
}
}
mqtt连接失败_Flutter通过Mqtt消费ActivieMQ相关推荐
- mqtt连接失败_Netty实战:如何让单机下Netty支持百万长连接?
单机下能不能让我们的网络应用支持百万连接?可以,但是有很多的工作要做.而且要考虑到单机的系统资源消耗能否支撑百万并发 一.操作系统优化 首先就是要突破操作系统的限制. 在Linux平台上,无论编写客户 ...
- Mqtt连接失败的种种原因(连接阿里云平台)
失败出现一:unable to connect to server 这个就是服务的问题 检查这两个地方 查看自己的区 格式要自己对应好 失败出现二:Connection lost 来,宝子,检查一下自 ...
- 小程序paho.mqtt连接微消息队列 MQTT 版
物联网项目现在越来越多,MQTT的使用场景也越来越广泛,同时遇到的技术问题也是越来越复杂. 最近在做一个小程序连接阿里云的微消息队列MQTT版,说实话,通过这次debug,发现阿里的技术文档很多方面不 ...
- MQTT client id重复导致连接失败
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/jiuxu3049/article/de ...
- MQTT客户端连接服务器协议,mqtt客户端和服务器长连接
mqtt客户端和服务器长连接 内容精选 换一换 介绍设置客户端和服务器的安全认证方式的相关参数.参数说明:表明与服务器建立链接后,不进行任何操作的最长时间.参数类型:USERSET取值范围:整型,0- ...
- emq auth mysql_EMQ X 认证鉴权(一)——基于 MySQL 的 MQTT 连接认证
前言 安全保护几乎对于所有的项目都是一个挑战,对于物联网项目更是如,自普及应用以来物联网业内已经发生过多起安全事故. 作为物联网通信协议事实标准,MQTT 保持着较高的安全性,提供了多层次的安全设计: ...
- ThingsBoard 二次开发之源码分析 5-如何接收 MQTT 连接
欢迎加入ThingsBoard技术交流群 这里可复制Q群号:69998183 关注"云腾五洲":获取二开ThingsBoard物联网平台演示 交流社区:ThingsKit-Thin ...
- NodeMCU 通过MQTT 连接阿里云物联网
NodeMCU 通过MQTT 连接阿里云物联网 前言: 这是第一个帖子,希望以后所有的东西都能记录在CSDN吧!自己在调试过程中也借鉴了很多人的帖子,这里总结出来,方便以后查阅,也方便他人! 1.No ...
- HarmonyOS系统中内核实现MQTT连接华为云的方法
大家好,今天主要和大家聊一聊,如何使用MQTT连接华为云平台的方法 目录 第一:MQTT通信基本原理 第二:华为IOT平台API 第三:华为IOT平台初始化 第四:设置命令响应函数 第五:数据上传 设 ...
最新文章
- 云桌面可附加桌面文件的程序_给我几分钟,还你一个小清新的电脑桌面
- button/input链接方式全攻略 [转]
- dfs-Rank the Languages
- 将python3.7降为3.5_python3.7降至3.5【python cookbook】python访问子字符串
- 台式电脑耳机插孔在哪_不到一千元的迷你电脑究竟如何?Intel NUC7CJYH测评来了...
- python科学计算笔记(十四)pandas数据过滤、清理、转换
- 解决:single failed: For artifact {null:null:null:jar}: The groupId cannot be empty. 把工程依赖的jar包打到入jar中
- mysql 分类_MYSQL数据类型分类
- UNIX-LINUX编程实践教程-第三章-实例代码注解-ls2
- PyQt5笔记(01) -- 创建空白窗体
- 5G加速向纵深发展 中国电信联合产业链开展“5G创新终端商用合作行动”
- 洛谷—— P1268 树的重量
- 在Vs2013下编译FreeCAD0.17源码
- weblogic控制台超时时间_WebLogic如何设置session超时时间
- 5分钟转换PDF为图片
- 计算机没桌面,电脑桌面的计算机图标没了怎么办
- linux 挂载ISO镜像文件
- python下载收费视频_用Python下载知乎视频,非常实用
- Linux学习笔记26——什么是 Shell scripts、shell script练习及讲解
- 安装EVA后可能出现无法在EVA输入中文的解决方法