From fbb64f0b4151a4fefb90191991aa0fba7b26c52a Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期一, 09 十二月 2024 18:08:59 +0800 Subject: [PATCH] 1.优化MQ相关设置 2.上报问题界面相关 --- app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java | 169 +++++++++++++++++++++++++------------------------------ 1 files changed, 77 insertions(+), 92 deletions(-) diff --git a/app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java b/app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java index 7a85cc5..d669dd5 100644 --- a/app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java +++ b/app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java @@ -2,12 +2,14 @@ import android.content.Context; import android.net.ConnectivityManager; -import android.net.Network; -import android.net.NetworkCapabilities; -import android.net.NetworkRequest; import android.util.Log; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.Observer; + import com.dayu.pipirrapp.utils.CommonKeyName; +import com.dayu.pipirrapp.utils.MyLog; +import com.dayu.pipirrapp.utils.NetUtils; import com.jeremyliao.liveeventbus.LiveEventBus; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; @@ -31,15 +33,15 @@ public class MqttManager { private static final String MQTT_BROKER_URL = "tcp://115.236.153.170:30764"; // 淇敼涓轰綘鐨� broker 鍦板潃 - private static final String CLIENT_ID = "mqttx_54052fa0"; + private static final String CLIENT_ID = "mqttx_f62ef124"; private static final String TOPIC = "workOrder"; // 璁㈤槄鐨勪富棰� - private ConnectivityManager connectivityManager; private MqttClient mqttClient; private MqttConnectOptions connectOptions; - boolean isHasNet = false; + boolean isHasNet = true; + private ExecutorService executorService = Executors.newSingleThreadExecutor(); - public MqttManager(Context context) { + public MqttManager(Context context, LifecycleOwner lifecycleOwner) { try { mqttClient = new MqttClient(MQTT_BROKER_URL, CLIENT_ID, new MemoryPersistence()); connectOptions = new MqttConnectOptions(); @@ -48,8 +50,25 @@ connectOptions.setCleanSession(false); connectOptions.setKeepAliveInterval(60); // 璁剧疆淇濇寔杩炴帴鐨勬椂闂� connectOptions.setAutomaticReconnect(true); // 鍚敤鑷姩閲嶈繛 - connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - checkNetwork(); + LiveEventBus.get(CommonKeyName.NetworkCallback).observe(lifecycleOwner, new Observer<Object>() { + @Override + public void onChanged(Object o) { + if (o instanceof Integer) { + switch ((int) o) { + case NetUtils.Available: + MyLog.i("MqttManager>>>Available"); + isHasNet = true; + reconnect(); + break; + case NetUtils.Lost: + MyLog.i("MqttManager>>>Lost"); + isHasNet = false; + disconnect(); + break; + } + } + } + }); } catch (MqttException e) { e.printStackTrace(); } @@ -57,16 +76,43 @@ // 杩炴帴鍒� MQTT broker public void connect() { - ExecutorService executorService = Executors.newSingleThreadExecutor(); executorService.execute(new Runnable() { @Override public void run() { try { + Log.d("MqttManager", "connect寮�濮嬭繛鎺sHasNet:" + isHasNet); if (isHasNet) { + Log.d("MqttManager", "connect寮�濮嬭繛鎺�"); + mqttClient.setCallback(new MqttCallback() { + @Override + public void connectionLost(Throwable cause) { + Log.d("MqttManager", "杩炴帴涓㈠け锛�" + cause.getMessage()); + // 澶勭悊杩炴帴涓㈠け锛屽彲浠ュ皾璇曢噸鏂拌繛鎺� + reconnect(); + } + + @Override + public void messageArrived(String topic, MqttMessage message) throws Exception { + Log.d("MqttManager", "鏀跺埌鐨勬秷:" + new String(message.getPayload())); + // 澶勭悊鏀跺埌鐨勬秷鎭� + } + + @Override + public void deliveryComplete(IMqttDeliveryToken token) { + // 澶勭悊娑堟伅鍙戦�佸畬鎴� + try { + Log.d("MqttManager", "鍙戦�佸畬鎴愶細" + new String(token.getMessage().toString())); + } catch (MqttException e) { + e.printStackTrace(); + } + } + }); mqttClient.connect(connectOptions); if (mqttClient.isConnected()) { - Log.d("MqttManager", "Connected to MQTT broker"); + Log.d("MqttManager", "connect杩炴帴鎴愬姛"); subscribeToTopic(); + } else { + Log.d("MqttManager", "connect杩炴帴澶辫触"); } } else { reconnect(); @@ -85,34 +131,11 @@ try { mqttClient.subscribe(TOPIC, (topic, message) -> { // 鏀跺埌娑堟伅鏃剁殑澶勭悊閫昏緫 - Log.d("MqttManager", "Received message:" + new String(message.getPayload())); + Log.d("MqttManager", "鏀跺埌娑堟伅锛�" + new String(message.getPayload())); //浼犻�扢Q鏀跺埌鐨勪俊鎭� LiveEventBus.get(CommonKeyName.locationData).post(message.getPayload()); }); - mqttClient.setCallback(new MqttCallback() { - @Override - public void connectionLost(Throwable cause) { - Log.d("MqttManager", "connectionLost" + cause.getMessage()); - reconnect(); - // 澶勭悊杩炴帴涓㈠け锛屽彲浠ュ皾璇曢噸鏂拌繛鎺� - } - @Override - public void messageArrived(String topic, MqttMessage message) throws Exception { - Log.d("MqttManager", "Received messageArrived:" + new String(message.getPayload())); - // 澶勭悊鏀跺埌鐨勬秷鎭� - } - - @Override - public void deliveryComplete(IMqttDeliveryToken token) { - // 澶勭悊娑堟伅鍙戦�佸畬鎴� - try { - Log.d("MqttManager", "deliveryComplete锛�" + new String(token.getMessage().toString())); - } catch (MqttException e) { - e.printStackTrace(); - } - } - }); } catch (MqttException e) { e.printStackTrace(); } @@ -130,10 +153,11 @@ // 鏂紑杩炴帴 public void disconnect() { + MyLog.d("MqttManager>>>>鍏抽棴杩炴帴"); try { if (mqttClient != null && mqttClient.isConnected()) { mqttClient.disconnect(); - System.out.println("Disconnected from MQTT broker"); + MyLog.d("MqttManager>>>>鍏抽棴杩炴帴鎴愬姛"); } } catch (MqttException e) { e.printStackTrace(); @@ -142,61 +166,22 @@ // 鑷姩閲嶈繛鏂规硶 private void reconnect() { - try { - if (isHasNet) { - while (!mqttClient.isConnected() && isHasNet) { - Log.d("MqttManager", "Attempting to reconnect..."); - mqttClient.connect(connectOptions); // 閲嶈瘯杩炴帴 - if (mqttClient.isConnected()) { - Log.d("MqttManager", "Connected to MQTT broker"); - subscribeToTopic(); - } - Thread.sleep(5000); // 姣� 5 绉掗噸璇曚竴娆� - } - Log.d("MqttManager", "Reconnected to MQTT broker! isHasNet=true"); - } else { - Log.d("MqttManager", "isHasNet is false"); - Thread.sleep(5000); - reconnect(); - } - - } catch (MqttException | InterruptedException e) { - try { - Thread.sleep(5000); - } catch (InterruptedException ex) { - e.printStackTrace(); - }// 姣� 5 绉掗噸璇曚竴娆� - reconnect(); - - } - } - - public void checkNetwork() { - NetworkRequest request = new NetworkRequest.Builder().addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) // 蹇呴』鍏峰浜掕仈缃戣兘鍔� - .build(); - - connectivityManager.registerNetworkCallback(request, new ConnectivityManager.NetworkCallback() { - @Override - public void onAvailable(Network network) { - super.onAvailable(network); - // 缃戠粶鍙敤鏃剁殑澶勭悊閫昏緫 - Log.d("MqttManager", "Network is available."); - isHasNet = true; - reconnect(); - } - - @Override - public void onLost(Network network) { - super.onLost(network); - // 缃戠粶涓㈠け鏃剁殑澶勭悊閫昏緫 - Log.d("MqttManager", "Network is lost."); - isHasNet = false; - try { - mqttClient.disconnect(); - } catch (MqttException e) { - e.printStackTrace(); - } - } - }); +// executorService.execute(() -> { +// try { +// MyLog.d("MqttManager>>>>寮�濮嬮噸杩�+isHasNet:" + isHasNet + ">>>mqttClient.isConnected():" + mqttClient.isConnected()); +// while (!mqttClient.isConnected() && isHasNet) { +// MyLog.d("MqttManager>>>>寮�濮嬭繛鎺�"); +// mqttClient.connect(connectOptions); +// if (mqttClient.isConnected()) { +// MyLog.d("MqttManager>>>杩炴帴鎴愬姛"); +// subscribeToTopic(); +// break; +// } +// Thread.sleep(5000); // 姣�5绉掗噸璇曚竴娆� +// } +// } catch (MqttException | InterruptedException e) { +// MyLog.e("MqttManager>>>Reconnection failed" + e.toString()); +// } +// }); } } -- Gitblit v1.8.0