mqtt消息队列,Android接收消息-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

mqtt消息队列,Android接收消息

2017-02-08 22:17:33 6439 2

//点击按钮调用resavebutton() 方法,通过控制台发送消息,不能收到,程序也不报错,请大神指导,谢谢

private void resavebutton() {

//

    /**
     * 设置当前用户私有的MQTT的接入点。例如此处示意使用XXX,实际使用请替换用户自己的接入点。接入点的获取方法是,在控制台申请MQTT实例,每个实例都会分配一个接入点域名。
     */
    final String broker ="tcp://mqf-p5o4k36qb8.mqtt.aliyuncs.com:1883";
    /**
     * 设置阿里云的AccessKey,用于鉴权
     */
    final String acessKey ="LTAIEGaxwGajao9g";
    /**
     * 设置阿里云的SecretKey,用于鉴权
     */
    final String secretKey ="NN0Z8mBsOJDckEGiZNqiaVuoozw6lx";
    /**
     * 发消息使用的一级Topic,需要先在MQ控制台里申请
     */
    final String topic ="liangjing12345";

    /**
     * MQTT的ClientID,一般由2部分组成,GroupID@@@DeviceID
     * 其中GroupID在MQ控制台里申请
     * DeviceID由应用方设置,可能是设备编号等,需要唯一,否则服务端拒绝重复的ClientID连接
     */
    final String consumerClientId ="GID_LIANGJING@@@456";//消费者
   // final String producerClientId ="GID_XXX@@@@XXXXXX";
    String sign;
    MemoryPersistence persistence = new MemoryPersistence();
    try {
        final MqttClient sampleClient = new MqttClient(broker, consumerClientId, persistence);
        final MqttConnectOptions connOpts = new MqttConnectOptions();
        System.out.println("Connecting to broker: " + broker);
        /**
         * 计算签名,将签名作为MQTT的password。
         * 签名的计算方法,参考工具类MacSignature,第一个参数是ClientID的前半部分,即GroupID
         * 第二个参数阿里云的SecretKey
         */
        sign = MacSignature.macSignature(consumerClientId.split("@@@")[0], secretKey);
        /**
         * 设置订阅方订阅的Topic集合,此处遵循MQTT的订阅规则,可以是一级Topic,二级Topic,P2P消息不需要显式订阅,
         */
        final String[] topicFilters=new String[]{topic+"/notice/"};
        final int[]qos={0};
        //final String[] topicFilters=new String[]{topic+"/notice/",topic+"/p2p"};
        //final int[]qos={0,0};
        connOpts.setUserName(acessKey);
        connOpts.setServerURIs(new String[] { broker });
        connOpts.setPassword(sign.toCharArray());
        connOpts.setCleanSession(false);
        connOpts.setKeepAliveInterval(100);
        sampleClient.setCallback(new MqttCallback() {
            public void connectionLost(Throwable throwable) {
                System.out.println("mqtt connection lost");
                throwable.printStackTrace();
                while(!sampleClient.isConnected()){
                    try {
                        sampleClient.connect(connOpts);
                        sampleClient.subscribe(topicFilters,qos);
                    } catch (MqttException e) {
                        e.printStackTrace();
                    }
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
            public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
                //System.out.println("messageArrived:" + topic + "------" + new String(mqttMessage.getPayload()));
                Toast.makeText(getApplication(),"接收到了消息",Toast.LENGTH_LONG).show();
            }
            public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
                //System.out.println("deliveryComplete:" + iMqttDeliveryToken.getMessageId());
                Toast.makeText(getApplication(),"接收到了消息",Toast.LENGTH_LONG).show();
            }
        });
        sampleClient.connect(connOpts);
        sampleClient.subscribe(topicFilters,qos);
        Thread.sleep(Integer.MAX_VALUE);
    } catch (Exception me) {
        me.printStackTrace();
    }

}
取消 提交回答
全部回答(2)
  • 热尔特人
    2019-07-17 20:46:37

    订阅的主题是不是少了一个/

    0 0
  • hill007299
    2019-07-17 20:46:37

    可以先看下 通过控制台发送消息的topic是否匹配,消息是否能在控制台查到

    0 0
添加回答
相关问答

5

回答

Spark 【问答合集】

社区小助手 2019-05-29 14:13:40 130239浏览量 回答数 5

22

回答

阿里云搭建VPN ,可以连接VPN,但是无法访问外网

斐济被 2017-04-10 10:18:11 90488浏览量 回答数 22

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 149027浏览量 回答数 22

59

回答

为阿里云ECS(CentOS7)配置IPv6隧道地址

dongshan8 2016-06-17 13:51:32 107628浏览量 回答数 59

24

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 660835浏览量 回答数 24

39

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 263731浏览量 回答数 39

105

回答

为阿里云ECS(Windows 2012)创建IPv6隧道地址

dongshan8 2016-06-09 16:40:16 104221浏览量 回答数 105

23

回答

【云服务器分享】网站访问速度快才是硬道理

dreamdoo 2012-10-15 10:15:02 86594浏览量 回答数 23

8

回答

mail.aliyun.com邮箱android手机客户端设置方法

jack_yang 2013-04-24 09:01:34 124228浏览量 回答数 8

37

回答

【云服务器教程征集令】这个六一阿里云邀您来吐槽!

fanyue88888 2012-06-01 18:55:41 114972浏览量 回答数 37
0
文章
1
问答
问答排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载