当前位置:   article > 正文

android mqtt(轻量级物联网消息推送)

android mqtt(轻量级物联网消息推送)

MQTT是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用,是专为受限设备和低带宽、高延迟或不可靠的网络而设计。这些原则也使该协议成为新兴的“机器到机器”(M2M)或物联网(IoT)世界的连接设备,以及带宽和电池功率非常高的移动应用的理想选择。例如,它已被用于通过卫星链路与代理通信的传感器、与医疗服务提供者的拨号连接,以及一系列家庭自动化和小型设备场景。它也是移动应用的理想选择,因为它体积小,功耗低,数据包最小,并且可以有效地将信息分配给一个或多个接收器。

特点

  • 开放消息协议,简单易实现
  • 发布订阅模式,一对多消息发布
  • 基于TCP/IP网络连接,提供有序,无损,双向连接。
  • 1字节固定报头,2字节心跳报文,最小化传输开销和协议交换,有效减少网络流量。
  • 消息QoS支持,可靠传输保证

接下来主要应用于Android中的使用。

1.build.gradle中引入一下包,使项目能正常使用mqtt:

  1. implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
  2. implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

 2.设置mqtt连接服务器

  1. //连接到服务器
  2. public void connectMQTT(String host, String port, String clientId, String userName, String token, IMqttActionListener callBack) {
  3. mMqttClient = new MqttAndroidClient(context, String.format("tcp://%s:%s", host, port), clientId);
  4. //连接参数
  5. MqttConnectOptions options;
  6. options = new MqttConnectOptions();
  7. //设置自动重连
  8. options.setAutomaticReconnect(true);
  9. // 缓存
  10. options.setCleanSession(true);
  11. // 设置超时时间,单位:秒
  12. options.setConnectionTimeout(300);
  13. // 心跳包发送间隔,单位:秒
  14. options.setKeepAliveInterval(45);
  15. // 用户名
  16. options.setUserName(userName);
  17. // 密码
  18. options.setPassword(token.toCharArray());
  19. options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);
  20. // 设置MQTT监听
  21. mMqttClient.setCallback(new MqttCallback() {
  22. @Override
  23. public void connectionLost(Throwable cause) {
  24. Log.d(TAG, "connectionLost: 连接断开");
  25. mqttListener.onConnectionLost(cause);
  26. }
  27. @Override
  28. public void messageArrived(String topic, MqttMessage message) throws Exception {
  29. Log.d(TAG, "收到消息:" + message.toString());
  30. mqttListener.onMessageArrived(topic, message);
  31. }
  32. @Override
  33. public void deliveryComplete(IMqttDeliveryToken token) {
  34. mqttListener.onDeliveryComplete(token);
  35. }
  36. });
  37. try {
  38. if (!mMqttClient.isConnected()) {
  39. //进行连接
  40. mMqttClient.connect(options, null, callBack);
  41. }
  42. } catch (MqttException e) {
  43. e.printStackTrace();
  44. }
  45. }

 3.订阅主题
 

  1. public void subscribeMQTT(String topic, int qos, IMqttActionListener callBack) {
  2. try {
  3. //连接成功后订阅主题
  4. mMqttClient.subscribe(topic, qos, null, callBack);
  5. } catch (MqttException e) {
  6. e.printStackTrace();
  7. }
  8. }

4.取消订阅主题

  1. public void unsubscribeMQTT(String topic, IMqttActionListener callBack) {
  2. try {
  3. mMqttClient.unsubscribe(topic, null, callBack);
  4. } catch (MqttException e) {
  5. e.printStackTrace();
  6. }
  7. }

5.发送消息

  1. public void sendMsg(String topic, String content, int qos, IMqttActionListener calBack) {
  2. MqttMessage msg = new MqttMessage();
  3. msg.setPayload(content.getBytes());//设置消息内容
  4. msg.setQos(qos);//设置消息发送质量,可为0,1,2.
  5. //设置消息的topic,并发送。
  6. try {
  7. if (mMqttClient.isConnected()) {
  8. mMqttClient.publish(topic, msg, null, calBack);
  9. }
  10. } catch (MqttException e) {
  11. e.printStackTrace();
  12. }
  13. }

 6.断开连接

  1. public void disconnect() {
  2. if (mMqttClient != null && mMqttClient.isConnected()) {
  3. try {
  4. mMqttClient.disconnect();
  5. } catch (MqttException e) {
  6. e.printStackTrace();
  7. }
  8. }
  9. }

 7.添加监听事件

  1. public void addMqttListener(MqttListener mqttListener) {
  2. this.mqttListener = mqttListener;
  3. }
  4. public interface MqttListener {
  5. void onSendMsgSuccess(IMqttToken asyncActionToken);
  6. void onSendMsgFailure(IMqttToken asyncActionToken, Throwable exception);
  7. void onConnectionLost(Throwable cause);
  8. void onMessageArrived(String topic, MqttMessage message);
  9. void onDeliveryComplete(IMqttDeliveryToken token);
  10. }

参考文献:MQTT 3.1.1 协议中文版 | MQTT中文网

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/601467
推荐阅读
相关标签
  

闽ICP备14008679号