当前位置:   article > 正文

安卓使用MQTT实现阿里云物联网云台订阅和发布主题(3)

安卓使用MQTT实现阿里云物联网云台订阅和发布主题(3)

一、订阅主题代码讲解

  1. private final String mqtt_sub_topic = "/sys/k0wih08FdYq/LHAPP/thing/service/property/set";//订阅话题
  2. //mqtt客户端订阅主题
  3. //QoS=0时,报文最多发送一次,有可能丢失
  4. //QoS=1时,报文至少发送一次,有可能重复
  5. //QoS=2时,报文只发送一次,并且确保消息只到达一次。
  6. int[] qos = {1};
  7. String[] topic = {mqtt_sub_topic};
  8. mqttClient.subscribe(topic, qos);

二、发布主题代码讲解

  1. private final String payloadJson = "{\"id\":%s,\"params\":{\"LightLux\": %s,\"Humidity\": %s,\"temperature\": %s},\"method\":\"thing.event.property.post\"}";
  2. private void postDeviceProperties() {
  3. try {
  4. String payload = String.format(payloadJson, String.valueOf(System.currentTimeMillis()), 10,10,10);
  5. String responseBody = payload;
  6. MqttMessage message = new MqttMessage(payload.getBytes("utf-8"));
  7. message.setQos(1);
  8. String pubTopic = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post";
  9. mqttClient.publish(pubTopic, message);
  10. Log.d(TAG, "publish topic=" + pubTopic + ",payload=" + payload);
  11. msgTextView.setText("发布成功");
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. msgTextView.setText("发布失败");
  15. Log.e(TAG, "postDeviceProperties error " + e.getMessage(), e);
  16. }
  17. }

三、回调函数代码讲解

  1. mqttClient.setCallback(new MqttCallback() {
  2. @Override
  3. public void connectionLost(Throwable cause) {
  4. //这里不需要做处理
  5. //因为在option有一个方法可以自动重连(如下)
  6. //断开后,是否自动连接,connOpts.setAutomaticReconnect(true);
  7. }
  8. @Override
  9. public void deliveryComplete(IMqttDeliveryToken token) {
  10. //publish后会执行到这里
  11. System.out.println("deliveryComplete---------" + token.isComplete());
  12. }
  13. @Override
  14. public void messageArrived(String topicName, MqttMessage message) throws Exception {
  15. //subscribe主题后,收到消息执行到这里
  16. try {
  17. JSONObject jsonObject = new JSONObject(message.toString());// 解析JSON数据
  18. Log.i(TAG, "消息到达,message: " + message);
  19. JSONObject paramsObject = jsonObject.getJSONObject("params");// 获取params字段中的JSONObject
  20. int Humidity = paramsObject.getInt("Humidity");
  21. int LightLux = paramsObject.getInt("LightLux");
  22. int temperature = paramsObject.getInt("temperature");
  23. humidityTextView.setText(String.valueOf(Humidity));
  24. lightluxTextView.setText(String.valueOf(LightLux));
  25. temperatureTextView.setText(String.valueOf(temperature));
  26. } catch (JSONException e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. });

四、实验现象 

五、完整代码

链接:https://pan.baidu.com/s/1cbcAjmzPWw4n7EvO7uT62A?pwd=8888 
提取码:8888

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

闽ICP备14008679号