互联网服务android

android如何使用MQTT实现消息推送

请教:android使用MQTT实现消息推送 ,只能在android应用启动时获取MQTT中预留的消息 ,应用启动后不能自动接收MQTT上后续发出的消息,需要怎么做才能够实现自动接收呢?
如图:

JK3)[4H$DSC]}Z03@`%`R0J.jpg



其中MQTT客户机实用程序中 测试消息3 为应用启动前预发布的消息,应用启动后成功获取了消息测试3 , 再之后在MQTT客户机实用程序发布测试消息4,移动应用并未自动获取到该消息,必须要重新启动应用才能够获取到消息测试4
参与2

1同行回答

习惯丶默习惯丶默软件开发工程师新宇连邦
以下是我的代码:在android应用启动时会执行下面Subscribe 类的doTest方法Subscribe 类:public class Subscribe {        public static String doTest(Handler handler) {                try {   ...显示全部
以下是我的代码:
在android应用启动时会执行下面Subscribe 类的doTest方法
Subscribe 类:
public class Subscribe {
        public static String doTest(Handler handler) {
                try {
                        MqttClient client = new MqttClient("tcp://192.168.0.63:1883",
                                        "PlainText", null);
                        CallBack callback = new CallBack("PlainText", handler);
                        client.setCallback(callback);
                        MqttConnectOptions conOptions = new MqttConnectOptions();
                        conOptions.setCleanSession(false);
                        client.connect(conOptions);
                        client.subscribe("testTopic", 1);
                        //Thread.sleep(10000);
                        client.disconnect();
                } catch (Exception e) {
                        e.printStackTrace();
                        return "failed";
                }
                return "success";
        }
}

CallBack类:
public class CallBack implements MqttCallback {
        private String instanceData = "";
        private Handler handler;

        public CallBack(String instance, Handler handler) {
                instanceData = instance;
                this.handler = handler;
        }

        public void messageArrived(MqttTopic topic, MqttMessage message) {
                try {
                        Message msg = Message.obtain();
                        Bundle bundle = new Bundle();
                        bundle.putString("content", message.toString());
                        msg.setData(bundle);
                        handler.sendMessage(msg);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

        public void connectionLost(Throwable cause) {
                System.out.println("123");
                System.out.println("456");
        }

        public void deliveryComplete(MqttDeliveryToken token) {
                System.out.println("789");
                System.out.println("110");
        }收起
互联网服务 · 2013-08-06
浏览1154

提问者

习惯丶默
软件开发工程师新宇连邦
擅长领域: 中间件javaIBM worklight

相关问题

问题状态

  • 发布时间:2013-08-06
  • 关注会员:1 人
  • 问题浏览:6591
  • 最近回答:2013-08-06
  • X社区推广