首先在实现本功能之前我们需要储备一下预备知识,大家可以看我的前两篇文章以及官网,了解MQTT的基本常识:
MQTT入门篇

MQTT服务器Mosquitto安装及使用

MQTT官网

在步入正题之前先给大家发放个福利,介绍一款MQTT插件:MQTTLens 。

MQTTLens插件的使用

MQTTLens

1.安装:点击链接进行安装。

2.输入以下三个信息:
connection name : 随便写
HostName:写服务器地址,如果自己电脑测试,就写本地地址
client ID : 唯一ID 一般是设备唯一识别码

3.保存,使用 。接下来就可以订阅或者发布消息了。

⚠️:订阅和发布的标题必须一致!!!

客户端接收MQTT消息

这里我们需要用到开源库 paho,更多paho的接收可以查看官网:paho官网

paho API

###第一步:倒入依赖库PAHO
1.在APP下Gradle中添加:

dependencies {compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.1'
}

2.在project下Gradle中添加:

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

第二步:添加权限

 <uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.INTERNET" />

第三步:开启服务

在AndroidMainFest.xml中开启MQTT服务:

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

第四步:订阅器的实现

前面几步准备工作完成之后我们就可以正式开启今天的任务。

1.首先创建MqttAndroidClient和MqttConnectOptions,这两员大将一个是负责连接,一个是复杂属性设置的:

MqttAndroidClient mqttAndroidClient = new MqttAndroidClient(getApplicationContext(), serverUri, clientId);MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();

2.然后去设置MqttConnectOptions属性:

 // 配置MQTT连接mqttConnectOptions.setAutomaticReconnect(true);mqttConnectOptions.setCleanSession(false);mqttConnectOptions.setUserName(null);mqttConnectOptions.setPassword(null);mqttConnectOptions.setConnectionTimeout(30);  //超时时间mqttConnectOptions.setKeepAliveInterval(60); //心跳时间,单位秒mqttConnectOptions.setAutomaticReconnect(true);//自动重连

以上是一些常用的属性,更多属性可以查看官网:Class MqttConnectOptions API

3.创建MQTT连接

mqttAndroidClient.connect(mqttConnectOptions);

4.设置监听

mqttAndroidClient.setCallback(new MqttCallbackExtended() {@Overridepublic void connectComplete(boolean reconnect, String serverURI) {Log.e(TAG, "reconnect ---> " + reconnect + "       serverURI--->" + serverURI);}@Overridepublic void connectionLost(Throwable cause) {Log.e(TAG, "cause ---> " + cause);}@Overridepublic void messageArrived(String topic, MqttMessage message) throws Exception {Log.e(TAG, "topic ---> " + topic + "       message--->" + message);startNotification(message);}@Overridepublic void deliveryComplete(IMqttDeliveryToken token) {Log.e(TAG, "token ---> " + token);}});

5.订阅消息

我们在上面connectComplete方法里面去订阅消息

    final String subscriptionTopic = "exampleAndroidTopic";private void subscribeToTopic() {try {mqttAndroidClient.subscribe(subscriptionTopic, 0, null, new IMqttActionListener() {@Overridepublic void onSuccess(IMqttToken asyncActionToken) {Log.e(TAG, "onFailure ---> " + asyncActionToken);}@Overridepublic void onFailure(IMqttToken asyncActionToken, Throwable exception) {Log.e(TAG, "onFailure ---> " + exception);}});} catch (MqttException e) {Log.e(TAG, "subscribeToTopic is error");e.printStackTrace();}}

到这里大公告成,已经可以接收到发送的消息了。
接下来去实现我们的Notification。

Notification通知栏

Notification使用非常简单,这里就不详细介绍,主要见代码:

 private NotificationManager notificationManager ;private NotificationCompat.Builder notificationBuilder ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initNotification();}private void initNotification() {notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);notificationBuilder = new NotificationCompat.Builder(this);}

初始化完成之后我们在上面监听器的messageArrived方法中去接收消息。

@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {Log.e(TAG, "topic ---> " + topic + "       message--->" + message);startNotification(message);
}
private void startNotification(MqttMessage message) {// paramsBitmap largeIcon = ((BitmapDrawable) getResources().getDrawable(R.mipmap.ic_launcher_round)).getBitmap();String info = message.toString();Intent intent = new Intent(MainActivity.this,JumpActivity.class);intent.putExtra(MESSAGE,info);notificationBuilder.setLargeIcon(largeIcon).setSmallIcon(R.mipmap.ic_launcher_round).setContentTitle("推送消息啦").setContentText(info).setTicker(info).setContentIntent(PendingIntent.getActivity(MainActivity.this, 0, intent, 0));Notification notification = notificationBuilder.getNotification();notificationManager.notify(NOTIFICATION_ID, notification);}

好啦,就是这么简单,记下来让我们看一下展示效果!

⚠️:切记,地址和端口一定要匹配 不让玩死也收不到消息!!!!!!!!!!!!!!!!!!!!!!!!

效果展示

DEMO地址 :
大家只需要更换自己的IP地址就可以用了。

http://download.csdn.net/detail/github_33304260/9879717

后续会更加精彩,欢迎关注本人博客以及github
https://github.com/libin7278/ImageLoader 欢迎star

扫码关注公众号“伟大程序猿的诞生“,更多干货新鲜文章等着你~

公众号回复“资料获取”,获取更多干货哦~

有问题添加本人微信号“fenghuokeji996” 或扫描博客导航栏本人二维码

酷炫MQTT实现消息推送相关推荐

  1. Activemq MQTT 简单消息推送示例

    Activemq MQTT 简单消息推送示例 简介     简单使用 MQTT 连接 Activemq 进行消息推送的示例代码 编写详情 环境准备     使用docker启动Activemq,查看M ...

  2. Android MQTT实现消息推送

    飞哥语录:编程说白了就是发送数据,接收数据,处理数据. 1.概述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有 ...

  3. 基于MQTT的消息推送

    这段时间学习了推送技术,对xmpp和mqtt 协议做了下比较. xmpp基于xml信息传递,所以传输信息量比较大,在保持长链接情况下功耗会比较大. 可能还是比较适合用来做聊天之类的通讯应用,而对于智能 ...

  4. 浏览器WebSocket连接apollo的MQTT实现消息推送(WEB系统微信扫码登录)

    序 一直就想搭建消息队列的,因为目前业务发展还没有到这块,一直没有搭建.刚好今天接到的一个需求是web系统实现微信扫码登录,另外我们的微信对接是统一的中台接口对接,所以我们没办法做到回调我们的web业 ...

  5. Android平台上使用MQTT协议实现消息推送功能

    MQTT实现消息推送,效果如下 服务端下载地址:http://activemq.apache.org/download-archives.html jar包地址 百度网盘:https://pan.ba ...

  6. SpringBoot如何集成MQTT消息推送

    1.需求分析 近期笔者项目需要用到mqtt实现消息推送,笔者选择emq作为mqtt服务器载体,上篇笔者讲解了如何在linux中安装mqtt服务:https://blog.csdn.net/zhangx ...

  7. Web 实时消息推送详解

    title: Web 实时消息推送详解 category: 系统设计 head: meta name: keywords content: 消息推送,短轮询,长轮询,SSE,Websocket,MQT ...

  8. 前端后端的消息推送 7 种方式

    消息推送 7 种方式 看了原文章后,自己写的笔记 参考 https://mp.weixin.qq.com/s/xQV81HiD8hkzx2wMc3ZT7A 需求 先说需求,实现一个站内信的web消息推 ...

  9. 7种 实现web实时消息推送的方案

    我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里我帮他整理了一下几种方案,并简单做了实现. 什么是 ...

  10. 我有 7种 实现web实时消息推送的方案,7种!

    技术交流,公众号:程序员小富 大家好,我是小富- 我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里 ...

最新文章

  1. R语言ggplot2可视化:应用pivot_longer函数将数据从宽格式转换为长格式、为dataframe的每一列绘制密度图和直方图(堆叠)
  2. 面向数据流的设计方法
  3. React学习资料+css进阶资料总结
  4. Vue 犯罪指南:TypeError: Right-hand side of 'instanceof' is not an object
  5. 中南大学计算机网.doc,中南大学计算机网络习题2014-2.doc
  6. ios 销毁当前页面重新开启_利用Vue中keep-alive,快速实现页面缓存
  7. HDU2076 夹角有多大【水题】
  8. 顶目群定义及项目群管理
  9. 自动驾驶中ROS操作系统的重要性
  10. 物联网技术应用成商业市场盈利关键
  11. 国税局验证码识别 | 不讲武德篇
  12. linux怎么用命令上传本地文件,Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件...
  13. java : mozilla rhino js引擎 使用教程
  14. 如何使用python 执行命令行传入的代码
  15. 2023 IEEE Fellow出炉:唐立新、宗成庆、朱军、姬水旺等入选
  16. Aleo提高高算力的解决方法(精选)
  17. [AD资料] AD入门之AD10软件安装
  18. 移动互联网时代,不会“网络预约”的老年人应该怎么办
  19. 学习Python语言有什么用?
  20. 博客园页面定制html代码,博客园主题分享

热门文章

  1. Git:本地Git仓库连接码云并新建分支提交
  2. 视觉SLAM十四讲_2_三维空间刚体运动
  3. Bug: tf.contrib.checkpoint.NoDependency object
  4. 血压预测常用数据集整理
  5. Batch Normalization 算法解析
  6. Cure Your Acne by NOT Eating This!
  7. 使用BAPI批量修改采购信息记录的税率
  8. Hi3519v101调试 RTC功能
  9. Core Graphics Paths
  10. POJ 3070 Fibonacci(矩阵高速功率)