From 4f7f99c6ea914bcd38de78bd8371be566026b905 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 26 二月 2025 15:54:14 +0800
Subject: [PATCH] -为按钮和列表项添加波纹效果,以获得更好的视觉反馈 -改进MapFragment中的底部布局动画 -在MapFragment中添加设备状态和RTU地址显示 -更新BaseListResult以支持泛型类型 -为设备数据添加IntakeListResult和IntakeResult -通过数据库支持增强标记位置更新功能 -添加电话拨号意图以分隔标记详细信息 -通过过期检查改进磁贴缓存 -添加问题报告的确认对话框 -更新登录活动以限制用户名长度 -为波纹效果和UI元素添加新颜色 -重构XML布局以使用新的波纹图 -改进MapFragment中的错误处理和用户反馈
---
app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java | 133 +++++++++++++++++++++++++++----------------
1 files changed, 83 insertions(+), 50 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 d669dd5..3902e86 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,16 @@
package com.dayu.pipirrapp.net;
import android.content.Context;
-import android.net.ConnectivityManager;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
import android.util.Log;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.Observer;
+import com.dayu.pipirrapp.MyApplication;
import com.dayu.pipirrapp.utils.CommonKeyName;
+import com.dayu.pipirrapp.utils.MyJsonParser;
import com.dayu.pipirrapp.utils.MyLog;
import com.dayu.pipirrapp.utils.NetUtils;
import com.jeremyliao.liveeventbus.LiveEventBus;
@@ -20,6 +23,8 @@
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import java.util.HashMap;
+import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -32,17 +37,28 @@
*/
public class MqttManager {
- private static final String MQTT_BROKER_URL = "tcp://115.236.153.170:30764"; // 淇敼涓轰綘鐨� broker 鍦板潃
- private static final String CLIENT_ID = "mqttx_f62ef124";
+ // 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 String CLIENT_ID = "mqttx_a7a9fe73";
private static final String TOPIC = "workOrder"; // 璁㈤槄鐨勪富棰�
private MqttClient mqttClient;
private MqttConnectOptions connectOptions;
boolean isHasNet = true;
- private ExecutorService executorService = Executors.newSingleThreadExecutor();
+ //鏄惁杩炴帴鎴愬姛杩囦竴娆★紝娌℃湁鐨勮瘽鑱旂綉鍚庨噸杩�
+ boolean isConnet = false;
+ private final ExecutorService executorService = Executors.newSingleThreadExecutor();
public MqttManager(Context context, LifecycleOwner lifecycleOwner) {
try {
+ PackageManager manager = context.getPackageManager();
+ PackageInfo info = null;
+ try {
+ info = manager.getPackageInfo(context.getPackageName(), 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ CLIENT_ID = context.getPackageName() + UUID.randomUUID().toString().replace("-", "") + "_" + info;
mqttClient = new MqttClient(MQTT_BROKER_URL, CLIENT_ID, new MemoryPersistence());
connectOptions = new MqttConnectOptions();
connectOptions.setUserName("mqtt_yjy");
@@ -50,6 +66,31 @@
connectOptions.setCleanSession(false);
connectOptions.setKeepAliveInterval(60); // 璁剧疆淇濇寔杩炴帴鐨勬椂闂�
connectOptions.setAutomaticReconnect(true); // 鍚敤鑷姩閲嶈繛
+ connectOptions.setConnectionTimeout(30);// 璁剧疆杩炴帴瓒呮椂鏃堕棿锛屽崟浣嶄负绉�
+ 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", "messageArrived鏀跺埌鐨勬秷:" + new String(message.getPayload()));
+ // 澶勭悊鏀跺埌鐨勬秷鎭�
+ }
+
+ @Override
+ public void deliveryComplete(IMqttDeliveryToken token) {
+ // 澶勭悊娑堟伅鍙戦�佸畬鎴�
+ try {
+ Log.d("MqttManager", "鍙戦�佸畬鎴愶細" + new String(token.getMessage().toString()));
+ } catch (MqttException e) {
+ e.printStackTrace();
+ }
+ }
+ });
LiveEventBus.get(CommonKeyName.NetworkCallback).observe(lifecycleOwner, new Observer<Object>() {
@Override
public void onChanged(Object o) {
@@ -58,12 +99,14 @@
case NetUtils.Available:
MyLog.i("MqttManager>>>Available");
isHasNet = true;
- reconnect();
+ if (!isConnet) {
+ reconnect();
+ }
break;
case NetUtils.Lost:
MyLog.i("MqttManager>>>Lost");
isHasNet = false;
- disconnect();
+// disconnect();
break;
}
}
@@ -83,30 +126,6 @@
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", "connect杩炴帴鎴愬姛");
@@ -129,11 +148,16 @@
// 璁㈤槄涓婚
private void subscribeToTopic() {
try {
+ isConnet = true;
mqttClient.subscribe(TOPIC, (topic, message) -> {
- // 鏀跺埌娑堟伅鏃剁殑澶勭悊閫昏緫
- Log.d("MqttManager", "鏀跺埌娑堟伅锛�" + new String(message.getPayload()));
+ // 鍦ㄥ瓙绾跨▼鏀跺埌娑堟伅鏃剁殑澶勭悊閫昏緫
+ Log.d("MqttManager", "subscribe鏀跺埌娑堟伅锛�" + new String(message.getPayload()));
//浼犻�扢Q鏀跺埌鐨勪俊鎭�
- LiveEventBus.get(CommonKeyName.locationData).post(message.getPayload());
+ HashMap<String, Object> data = MyJsonParser.getMapFromJson(new String(message.getPayload()));
+ //鍒ゆ柇鏄惁鏄綋鍓嶇敤鎴�
+ if (data.get("inspectorId").equals(MyApplication.myApplication.userId)) {
+ LiveEventBus.get(CommonKeyName.MQTTData).post(data.get("workOrderId"));
+ }
});
} catch (MqttException e) {
@@ -161,27 +185,36 @@
}
} catch (MqttException e) {
e.printStackTrace();
+ } finally {
+ executorService.shutdown();
}
}
// 鑷姩閲嶈繛鏂规硶
private void reconnect() {
-// 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());
-// }
-// });
+ executorService.execute(() -> {
+ int reconnectAttempts = 0;
+ while (!mqttClient.isConnected() && isHasNet) {
+ try {
+ MyLog.d("MqttManager>>>>寮�濮嬮噸杩�");
+ mqttClient.connect(connectOptions);
+ if (mqttClient.isConnected()) {
+ MyLog.d("MqttManager>>>杩炴帴鎴愬姛");
+ subscribeToTopic();
+ break;
+ }
+ // 鎸囨暟閫�閬�
+ long backoff = Math.min((1L << reconnectAttempts) * 1000, 30000);
+ Thread.sleep(backoff);
+ reconnectAttempts++;
+ } catch (MqttException e) {
+ MyLog.e("MqttManager>>>Reconnection failed" + e.getMessage());
+ // 鍙互鍦ㄨ繖閲屽鍔犻噸杩炲皾璇曟鏁扮殑闄愬埗
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt(); // 淇濈暀涓柇鐘舵��
+ return;
+ }
+ }
+ });
}
}
--
Gitblit v1.8.0