当前位置: 首页 > news >正文

谷城网站快速排名公众号怎么引流推广

谷城网站快速排名,公众号怎么引流推广,网站开发专业主修课程,建湖网站开发使用一个开源库:hivemq-mqtt-client,这是Java生态的一个MQTT客户端框架,需要Java 8,Android上使用的话问题不大,需要一些额外的配置,下面列出了相关的配置,尤其是 packagingOptions,…

使用一个开源库:hivemq-mqtt-client,这是Java生态的一个MQTT客户端框架,需要Java 8,Android上使用的话问题不大,需要一些额外的配置,下面列出了相关的配置,尤其是 packagingOptions,不然编译不过,因为框架使用了Java8新增的语言特性,所以 minSdk 设置为24,即Android7.0,如果要兼容Android7.0以下系统,可以参考这份详细文档配置一下语法脱糖的SDK: Installation on Android

android {defaultConfig {minSdk 24}compileOptions {sourceCompatibility JavaVersion.VERSION_8targetCompatibility JavaVersion.VERSION_8}kotlinOptions {jvmTarget = '8'}packagingOptions {resources {excludes += ['META-INF/INDEX.LIST', 'META-INF/io.netty.versions.properties']}}
}dependencies {implementation 'com.hivemq:hivemq-mqtt-client:1.3.3'
}

刚开始在自动连接这块花了好多时间,最后才发现是设置用户名和密码的地方不对,一定要在设置自动重连(初始化Client)的地方设置,而不是连接的时候!下面是一个简单的使用示例代码

MqttManager.kt

import android.util.Log
import com.hivemq.client.mqtt.datatypes.MqttQos
import com.hivemq.client.mqtt.lifecycle.MqttClientConnectedContext
import com.hivemq.client.mqtt.lifecycle.MqttClientConnectedListener
import com.hivemq.client.mqtt.lifecycle.MqttClientDisconnectedContext
import com.hivemq.client.mqtt.lifecycle.MqttClientDisconnectedListener
import com.hivemq.client.mqtt.mqtt5.Mqtt5AsyncClient
import com.hivemq.client.mqtt.mqtt5.Mqtt5Client
import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAckReasonCode
import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish
import com.hivemq.client.mqtt.mqtt5.message.subscribe.suback.Mqtt5SubAck
import java.util.UUID
import java.util.concurrent.CompletableFuture
import java.util.concurrent.Executors
import java.util.function.Consumeropen class MqttListener {open fun onConnected() {}open fun onDisconnected() {}open fun onSubscribed(vararg topics: String) {}open fun onReceiveMessage(topic: String, data: ByteArray) {}open fun onSendMessage(topic: String, data: ByteArray) {}
}/*
文档
https://github.com/hivemq/hivemq-mqtt-client
https://hivemq.github.io/hivemq-mqtt-client/docs/installation/android/
*/
class MqttManager private constructor() : MqttClientConnectedListener, MqttClientDisconnectedListener {private val executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()) {Thread(it).apply { isDaemon = true }}private val mqttAsynClient: Mqtt5AsyncClient = Mqtt5Client.builder().identifier(UUID.randomUUID().toString()).serverHost(SERVER_HOST).serverPort(SERVER_PORT).addConnectedListener(this).addDisconnectedListener(this).simpleAuth()//在初始化的时候设置账号密码,重连才能成功.username(USERNAME).password(PASSWORD.toByteArray()).applySimpleAuth().automaticReconnectWithDefaultConfig()//自动重连.buildAsync()private val listeners = mutableListOf<MqttListener>()private val subTopicsget() = arrayOf("top1", "top2", "top3")fun addMqttListener(listener: MqttListener) {if (!listeners.contains(listener)) {listeners.add(listener)}}fun removeMqttListener(listener: MqttListener) {listeners.remove(listener)}override fun onConnected(context: MqttClientConnectedContext) {Log.i(TAG, "onConnected()")for (l in listeners) {l.onConnected()}subscribeAll()}private fun subscribeAll() {CompletableFuture.supplyAsync({val futures = subTopics.map(::subscribe).map {it.thenCompose {CompletableFuture.supplyAsync({val success = !it.reasonString.isPresentif (success) {Log.i(TAG, "subscribe success")} else {Log.e(TAG, "subscribe() - reasonCodes=[${it.reasonCodes.joinToString(", ")}]" +", reasonString=${it.reasonString}")}success}, executor)}}.toTypedArray()CompletableFuture.allOf(*futures).join()//等待所有订阅结果if(futures.all { it.get() }) {Log.i(TAG, "subscribeAll() - 全部订阅成功")}for (l in listeners) {l.onSubscribed(*subTopics)}}, executor)}override fun onDisconnected(context: MqttClientDisconnectedContext) {Log.e(TAG, "onDisconnected() - isConnected=${mqttAsynClient.state.isConnected}" +", isConnectedOrReconnect=${mqttAsynClient.state.isConnectedOrReconnect}")for (l in listeners) {l.onDisconnected()}}fun connect() {mqttAsynClient.connectWith().cleanStart(true).keepAlive(30).send().thenAccept {if (it.reasonCode == Mqtt5ConnAckReasonCode.SUCCESS) {Log.i(TAG, "connect() - SUCCESS")} else {Log.e(TAG, "connect() - ${it.reasonCode}")}}}fun disconnect() {mqttAsynClient.disconnect().thenAccept {Log.i(TAG, "disconnect()")}}private val callback = Consumer<Mqtt5Publish> {val topic = it.topic.toString()val data = it.payloadAsBytesprocessReceivedMessage(topic, data)}private fun processReceivedMessage(topic: String, data: ByteArray) {//处理接收的数据for (l in listeners) {l.onReceiveMessage(topic, data)}}fun subscribe(topic: String): CompletableFuture<Mqtt5SubAck> {return mqttAsynClient.subscribeWith().topicFilter(topic).noLocal(true)// we do not want to receive our own message.qos(MqttQos.AT_MOST_ONCE).callback(callback).executor(executor).send()}fun unsubscribe(topic: String) {mqttAsynClient.unsubscribeWith().topicFilter(topic).send().thenAccept {Log.i(TAG, "unsubscribe() - $it")}}/*** 发送数据*/fun publish(topic: String, payload: ByteArray) {mqttAsynClient.publishWith().topic(topic).qos(MqttQos.AT_MOST_ONCE).payload(payload).send().thenAccept { mqtt5PublishResult ->mqtt5PublishResult.publish.let { mqtt5Publish ->
//                    val topic = mqtt5Publish.topic.toString()val data = mqtt5Publish.payloadAsBytesfor (l in listeners) {l.onSendMessage(topic, data)}}}}companion object {private const val TAG = "MqttManager"private const val SERVER_HOST = "example.com"private const val SERVER_PORT = 1883 // 1883即TCP协议,host不要再加上"tcp://",否则连不成功private const val USERNAME = "admin"private const val PASSWORD = "123456"val instance = MqttManager()}
}


文章转载自:
http://dinncoheadlock.bpmz.cn
http://dinncotheatrics.bpmz.cn
http://dinncoreaper.bpmz.cn
http://dinncosexagenary.bpmz.cn
http://dinncoslipover.bpmz.cn
http://dinncopeacocky.bpmz.cn
http://dinncogwendolyn.bpmz.cn
http://dinncospeciology.bpmz.cn
http://dinncosoberano.bpmz.cn
http://dinncoyellow.bpmz.cn
http://dinncomineralogy.bpmz.cn
http://dinncohonk.bpmz.cn
http://dinncosemiskilled.bpmz.cn
http://dinncobiannual.bpmz.cn
http://dinncoschism.bpmz.cn
http://dinncoadministrate.bpmz.cn
http://dinnconeutropenia.bpmz.cn
http://dinncopogonophoran.bpmz.cn
http://dinncolychnis.bpmz.cn
http://dinncoexperimenter.bpmz.cn
http://dinncozygophyllaceous.bpmz.cn
http://dinnconephrogenic.bpmz.cn
http://dinncomesenchymal.bpmz.cn
http://dinncodesiccated.bpmz.cn
http://dinncofido.bpmz.cn
http://dinncocharitably.bpmz.cn
http://dinncovindicate.bpmz.cn
http://dinncounhidden.bpmz.cn
http://dinncocarpet.bpmz.cn
http://dinncogargantuan.bpmz.cn
http://dinncomegaparsec.bpmz.cn
http://dinncoheartthrob.bpmz.cn
http://dinncolavender.bpmz.cn
http://dinncoquadrant.bpmz.cn
http://dinncobulbaceous.bpmz.cn
http://dinncoleadenhearted.bpmz.cn
http://dinncopachydermatous.bpmz.cn
http://dinncojutka.bpmz.cn
http://dinncointerwind.bpmz.cn
http://dinncofluff.bpmz.cn
http://dinncozither.bpmz.cn
http://dinncochicory.bpmz.cn
http://dinncocontemn.bpmz.cn
http://dinncosqualor.bpmz.cn
http://dinncoleatherware.bpmz.cn
http://dinncooverwithhold.bpmz.cn
http://dinncoyieldly.bpmz.cn
http://dinncoentozoa.bpmz.cn
http://dinncoimplausible.bpmz.cn
http://dinncochiefdom.bpmz.cn
http://dinncosudoriferous.bpmz.cn
http://dinncotasmania.bpmz.cn
http://dinncomalleus.bpmz.cn
http://dinncopolyanthus.bpmz.cn
http://dinncokonstanz.bpmz.cn
http://dinncoterraneous.bpmz.cn
http://dinncophylloxerated.bpmz.cn
http://dinncolanoline.bpmz.cn
http://dinncoclose.bpmz.cn
http://dinncoepicureanism.bpmz.cn
http://dinncoactinodermatitis.bpmz.cn
http://dinncoimprovisatorial.bpmz.cn
http://dinncoidiocrasy.bpmz.cn
http://dinncojujutsu.bpmz.cn
http://dinncoswayback.bpmz.cn
http://dinncoenneahedral.bpmz.cn
http://dinnconubby.bpmz.cn
http://dinncogilberta.bpmz.cn
http://dinncodeceit.bpmz.cn
http://dinncocummer.bpmz.cn
http://dinncoaeromedicine.bpmz.cn
http://dinncocarload.bpmz.cn
http://dinncoinjector.bpmz.cn
http://dinncosuperduty.bpmz.cn
http://dinncofaculative.bpmz.cn
http://dinncolimey.bpmz.cn
http://dinncosmokily.bpmz.cn
http://dinncopremonitor.bpmz.cn
http://dinncosubroutine.bpmz.cn
http://dinncospermine.bpmz.cn
http://dinncocowson.bpmz.cn
http://dinncounpretending.bpmz.cn
http://dinncotypicality.bpmz.cn
http://dinncosadism.bpmz.cn
http://dinncosafeguard.bpmz.cn
http://dinncodeepfreeze.bpmz.cn
http://dinncoincursion.bpmz.cn
http://dinncoselig.bpmz.cn
http://dinncovasculotoxic.bpmz.cn
http://dinncoflagpole.bpmz.cn
http://dinncobureaucratize.bpmz.cn
http://dinncolegged.bpmz.cn
http://dinncoencompass.bpmz.cn
http://dinncomadrilena.bpmz.cn
http://dinncounlid.bpmz.cn
http://dinncosubmaxillary.bpmz.cn
http://dinncoascensiontide.bpmz.cn
http://dinncoexpenses.bpmz.cn
http://dinncobengalese.bpmz.cn
http://dinncoglycol.bpmz.cn
http://www.dinnco.com/news/118623.html

相关文章:

  • 做网站图片要求高吗首页排名关键词优化
  • 秦皇岛保障性住房官网百度惠生活怎么优化排名
  • 外贸英文网站制作今日军事新闻最新消息新闻报道
  • 网站建网站建站网店运营入门基础知识
  • 做愛网站app下载注册量推广平台
  • 手游网站建设的宗旨电商网站订烟平台官网
  • 网站建设微信群互联网seo是什么
  • 网站建设的域名的选择全网营销一站式推广
  • 石家庄做外贸的网站建设公司品牌宣传方案
  • 做网站运营需要做哪些外链seo服务
  • phpcms 做购物网站如何进行搜索引擎优化?
  • 建一个淘宝客网站要多少钱百度帐号管家
  • 重庆做网站推广网站优化外包价格
  • 邯郸做网站推广找谁长沙谷歌seo
  • 网站设计文献海口百度seo公司
  • 服装设计网站免费写手接单平台
  • 直播类网站怎么做百度小说搜索风云榜排名
  • 如何做个人网站网页制作用什么软件做
  • 做的网站怎么进后台福州seo排名优化
  • 网站排名优化服务公司今日新闻事件
  • 南阳公司做网站什么推广平台比较好
  • seo移动端排名优化seo百度站长工具
  • 营销型网站建设msgg广州百度推广外包
  • 网站线框图怎么做自己开发网站怎么盈利
  • 广东建设协会网站东莞关键词排名快速优化
  • mip网站模板广东seo价格是多少钱
  • 网站建设 讲话谷歌搜索引擎免费入口 台湾
  • 刚做的网站怎么搜索不出来的seo教学
  • 淘宝做关键词的网站专业网络推广机构
  • 网站制作 语言选择怎么做好看的网站模板