[followme][开源]Android基于MQTT协议实现的免费消息推送服务

MQTT介绍

首先,我们简单的提一下mqtt是什么;MQTT(Message Queuing Telemetry

Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。

上面的这些语言都太官方了,我觉得总结一句话就是:连上mqtt之后,服务器那边就可以在你不断的情况下给你推送数据,并且实时性比较好;

工作原理

现在就让我们来总结一下我们所使用的mqtt到底是怎么工作的,方便以后查阅的时候少走弯路。

流程图:

一、既然要使用官方提供的mqtt协议,那么就必须导入官方给出的jar包我们使用的是IBM公司提供的wmqtt.jar包。

二、既然要让它一直在后台运行,则必须通过服务来运行,后台常驻才符合我们的要求。

既然是链接前后台的服务器,那么链接的状态可能要分很多种,例如:

就会有以上的六种状态信息;链接的状态是通过发送广播的形式发送的:

(1)、断开链接的广播:

(2)、尝试链接,但未链接上:

(3)、链接断开,重新链接:

(4)、由于其他的原因导致无法链接:

(5)、链接成功:

(6)、未能链接上:

每一种链接的状态都会发送相应的状态信息,在log中打印出来,让我们很直观的看到此时的mqtt处于哪一种状态。

三、我们在链接mqtt的时候需要先定义一个链接的接口:

mqttClient = MqttClient.createMqttClient(mqttConnSpec,usePersistence);

String mqttConnSpec = "tcp://" + brokerHostName + "@"+ brokerPortNumber;

详细信息是:“tcp://ip@1883”;

private boolean connectToBroker()这个方法是判断当前的链接是否存在,存在返回true,不存在返回false,然后在执行后面的操作;

// try to connect

mqttClient.connect(generateClientId(), cleanStart, keepAliveSeconds);

此时才是mqtt建立链接的操作,第一个参数generateClientID()是建立链接的一个关键字,是为了区分不同的主机链接到mqtt,方便服务器那边进行区分。(“fiber1/Android手机自带的序列号,这个码是唯一的,每一部手机都是不一样的,这样才能更好的区分)。第二个参数是false。第三个参数是保持心跳,五秒一次。

上面就已经说过了,当它返回的是true的时候,就说明这个链接已经建立成功了,后续的操作就是订阅我们的主题了;

mqttClient.subscribe(topics, parms);

既然有订阅,那么就必须有取消订阅,因为取消订阅是为了让我们的设备在注销之后,不想再收到任何的消息,或者是删除设备之后不想再收到任何的消息是一样的道理。所以这个操作是必不可少的。

mqttClient.unsubscribe(topics);

取消订阅和订阅的区别就在于订阅的时候需要发送QoS,而取消订阅的时候是不需要发送QoS的;

四、下面的就是接受广播:

1、private class BackgroundDataChangeIntentReceiver extends BroadcastReceiver// 接收广播

我们在做这件事的时候,通过请求一个唤醒锁,我们要求尽可能的唤醒锁-只是足够维持处理器的运行,直到我们完成

2、private class NetworkConnectionIntentReceiver extends BroadcastReceiver

所谓的响应于网络连接的变化-在连接到服务器之后,这让我们等待,直到我们有一个可用的数据连接

3、public class PingSender extends BroadcastReceiver

这个广播用于唤醒手机,使手机可以时刻接收mqtt的推送消息;

4、public class StatusUpdateReceiver extends BroadcastReceiver

当mqtt的客户端连接的状态发生改变的时候,通过StatusUpdateReceiver接收广播;

5、public class MQTTMessageReceiver extends BroadcastReceiver

当收到mqtt的推送的消息时,通过MQTTMessageReceiver接收广播;

五、最后就是,当我们收到推送的消息,怎么处理?比如下面的处理上报的告警消息

通过异步任务,将获取的json数据进行解析,

public static class AlarmTask extends AsyncTask// 收到告警消息,插入数据库,并且弹出提示界面.

alarmData = jsonobj.geMYSYString("alarm");

......告警处理代码

注意:在网络断开之后,我们没有重连的机制,只有在网络重新链接上之后,我们才会去再链接mqtt(重连的机制还是和第一次链接的机制一致),断网时,我们也没有必要去链接,因为这本身就是不通的,一直链接,反而会造成阻塞;

代码开源

MQTTService.java

wmqtt.jar

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,852评论 6 13
  • 第一章:相识 喜欢一个人是什么感觉,会很激动吗,还是会故作淡定。 平常的一个人应该是会很激动吧,有的人会语无伦次,...
    s时过境迁s阅读 173评论 0 1
  • 一 庄重的教堂里,威尔顿的象征 ——诺伦,正在宣读上帝的启示: “医生,律师,教师,工程师,科学家…… 将来的精英...
    蓬年阅读 644评论 0 3