private void connect() { boolean tryConnecting = true; while (tryConnecting) { try { MqttClient mqttClient = confac.getMqttClient(); mqttClient.connect(); setParams(params); setMsg(msg); setMqttSyncCallback(confac); listener1 = new InboundRequestProcessorFactoryImpl(); if (mqttClient.isConnected()) { if (confac.getTopic() != null) { mqttClient.subscribe(confac.getTopic()); log.info("Subscribed to the remote server."); } tryConnecting = false; injectHandler.invoke(msg); return; } } catch (Exception e1) { log.error("Connection attempt failed with '" + e1.getCause() + "'. Retrying."); pause(); } } }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); mapView.addLayer( new ArcGISTiledMapServiceLayer( "http://cache1.arcgisonline.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer")); layer = new GraphicsLayer(); mapView.addLayer(layer); mapView.getLocationDisplayManager().start(); mapView.getLocationDisplayManager().setLocationListener(this); try { client = new MqttAndroidClient( this, "tcp://broker.mqttdashboard.com:1883", "Likaci/MqttMap/" + id); client.setCallback(this); MqttConnectOptions options = new MqttConnectOptions(); options.setKeepAliveInterval(10); options.setConnectionTimeout(1000); options.setCleanSession(false); client.connect(options, null, this); } catch (Exception e) { e.printStackTrace(); } }
// region LocationListener @Override public void onLocationChanged(Location location) { String msg = String.format( "{\"id\":\"%s\",\"x\":%.9f,\"y\":%.9f}", id, location.getLongitude(), location.getLatitude()); try { client.publish("Likaci/MqttMap", msg.getBytes(), 0, false); } catch (Exception e) { e.printStackTrace(); } }