From c91d4503a63013be3242120ae0ad9cd1b0b8127e Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期四, 12 十二月 2024 17:18:54 +0800
Subject: [PATCH] 优化定位服务相关代码
---
app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java | 173 ++++++++++++++++++++++++++-------------------------------
1 files changed, 79 insertions(+), 94 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..ec1c035 100644
--- a/app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java
+++ b/app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java
@@ -1,13 +1,14 @@
package com.dayu.pipirrapp.net;
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;
@@ -30,16 +31,17 @@
*/
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 MQTT_BROKER_URL = "tcp://115.236.153.170:30764"; // 淇敼涓轰綘鐨� broker 鍦板潃
+private static final String MQTT_BROKER_URL = "tcp://192.168.10.52:1883";
+ private static final String CLIENT_ID = "mqttx_a7a9fe73";
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