refactor(mqtt): 使用MqttManager中的MQTT_TOPIC_COMMAND常量

将订阅主题从CommonConfig.MQTT_TOPIC_COMMAND改为MqttManager.MQTT_TOPIC_COMMAND
This commit is contained in:
TongTongStudio
2026-08-09 13:15:01 +08:00
parent ce34353ae3
commit 92d7c93a83
3 changed files with 33 additions and 22 deletions

View File

@@ -136,7 +136,7 @@ public class BaseApplication extends Application {
// 初始化 MQTT 并连接 Broker // 初始化 MQTT 并连接 Broker
MqttManager.init(this); MqttManager.init(this);
MqttManager.getInstance().connect(); MqttManager.getInstance().connect();
MqttManager.getInstance().subscribe(CommonConfig.MQTT_TOPIC_COMMAND, 1); MqttManager.getInstance().subscribe(MqttManager.MQTT_TOPIC_COMMAND, 1);
SherpaOnnxTtsManager.getInstance().init(this); SherpaOnnxTtsManager.getInstance().init(this);
AlarmManagerHelper.rescheduleAllAlarms(this); AlarmManagerHelper.rescheduleAllAlarms(this);

View File

@@ -3,15 +3,6 @@ package com.ttstd.dialer.config;
public class CommonConfig { public class CommonConfig {
public static final String MMKV_ID = "InterProcessKV"; public static final String MMKV_ID = "InterProcessKV";
/*MQTT 配置*/
public static final String MQTT_URL = "mqtt://175.178.213.60:1883";
public static final String MQTT_CLIENT_ID = "ttstd-dialer-android";
public static final String MQTT_USERNAME = "";
public static final String MQTT_PASSWORD = "";
/*订阅主题*/
public static final String MQTT_TOPIC_COMMAND = "ttstd/device/command";
/*发布主题*/
public static final String MQTT_TOPIC_STATUS = "ttstd/device/status";
public static final String CONTACT_HOME_PAGE = "contact_home_page_key"; public static final String CONTACT_HOME_PAGE = "contact_home_page_key";

View File

@@ -37,6 +37,16 @@ import java.util.concurrent.ConcurrentHashMap;
public class MqttManager { public class MqttManager {
private static final String TAG = "MqttManager"; private static final String TAG = "MqttManager";
/*MQTT 配置*/
public static final String MQTT_URL = "mqtt://175.178.213.60:1883";
public static final String MQTT_CLIENT_ID = "ttstd-dialer-android";
public static final String MQTT_USERNAME = "";
public static final String MQTT_PASSWORD = "";
/*订阅主题*/
public static final String MQTT_TOPIC_COMMAND = "ttstd/device/command";
/*发布主题*/
public static final String MQTT_TOPIC_STATUS = "ttstd/device/status";
/** /**
* 收到 MQTT 消息的事件 key,消息体为 {@link MqttMessage} * 收到 MQTT 消息的事件 key,消息体为 {@link MqttMessage}
*/ */
@@ -52,6 +62,16 @@ public class MqttManager {
*/ */
private static final long HEARTBEAT_INTERVAL_MS = 30_000L; private static final long HEARTBEAT_INTERVAL_MS = 30_000L;
/**
* 重连退避初始间隔(毫秒)
*/
private static final long RECONNECT_DELAY_INITIAL_MS = 1_000L;
/**
* 重连退避间隔上限(毫秒),超过此值不再翻倍
*/
private static final long RECONNECT_DELAY_MAX_MS = 64_000L;
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
private static volatile MqttManager INSTANCE; private static volatile MqttManager INSTANCE;
@@ -77,7 +97,7 @@ public class MqttManager {
/** /**
* 重连退避间隔(毫秒),随失败次数指数增长 * 重连退避间隔(毫秒),随失败次数指数增长
*/ */
private long mReconnectDelayMs = 1_000L; private long mReconnectDelayMs = RECONNECT_DELAY_INITIAL_MS;
private boolean mHeartbeatRunning; private boolean mHeartbeatRunning;
@@ -136,19 +156,19 @@ public class MqttManager {
mMqttClient = null; mMqttClient = null;
} }
URI uri = URI.create(CommonConfig.MQTT_URL); URI uri = URI.create(MQTT_URL);
String host = uri.getHost(); String host = uri.getHost();
int port = uri.getPort() > 0 ? uri.getPort() : 1883; int port = uri.getPort() > 0 ? uri.getPort() : 1883;
Mqtt5ClientBuilder builder = Mqtt5Client.builder() Mqtt5ClientBuilder builder = Mqtt5Client.builder()
.identifier(CommonConfig.MQTT_CLIENT_ID) .identifier(MQTT_CLIENT_ID)
.serverHost(host) .serverHost(host)
.serverPort(port) .serverPort(port)
.addDisconnectedListener(context -> onDisconnected()); .addDisconnectedListener(context -> onDisconnected());
if (!TextUtils.isEmpty(CommonConfig.MQTT_USERNAME)) { if (!TextUtils.isEmpty(MQTT_USERNAME)) {
builder.simpleAuth() builder.simpleAuth()
.username(CommonConfig.MQTT_USERNAME) .username(MQTT_USERNAME)
.password(CommonConfig.MQTT_PASSWORD.getBytes(StandardCharsets.UTF_8)) .password(MQTT_PASSWORD.getBytes(StandardCharsets.UTF_8))
.applySimpleAuth(); .applySimpleAuth();
} }
@@ -167,7 +187,7 @@ public class MqttManager {
scheduleReconnect(); scheduleReconnect();
} else { } else {
Logger.e(TAG, "connect: 连接成功"); Logger.e(TAG, "connect: 连接成功");
mReconnectDelayMs = 1_000L; mReconnectDelayMs = RECONNECT_DELAY_INITIAL_MS;
setConnected(true); setConnected(true);
// 连接成功后重新订阅之前订阅的主题 // 连接成功后重新订阅之前订阅的主题
reSubscribeAll(); reSubscribeAll();
@@ -205,7 +225,7 @@ public class MqttManager {
Logger.e(TAG, "scheduleReconnect: " + (mReconnectDelayMs / 1000) + "s 后重连"); Logger.e(TAG, "scheduleReconnect: " + (mReconnectDelayMs / 1000) + "s 后重连");
mReconnectHandler.postDelayed(mReconnectRunnable, mReconnectDelayMs); mReconnectHandler.postDelayed(mReconnectRunnable, mReconnectDelayMs);
// 下次退避间隔翻倍,封顶 30s // 下次退避间隔翻倍,封顶 30s
mReconnectDelayMs = Math.min(mReconnectDelayMs * 2, 30_000L); mReconnectDelayMs = Math.min(mReconnectDelayMs * 2, RECONNECT_DELAY_MAX_MS);
} }
private final Runnable mReconnectRunnable = new Runnable() { private final Runnable mReconnectRunnable = new Runnable() {
@@ -321,10 +341,10 @@ public class MqttManager {
} }
/** /**
* 上报设备状态,默认发布到 {@link CommonConfig#MQTT_TOPIC_STATUS} * 上报设备状态,默认发布到 {@link #MQTT_TOPIC_STATUS}
*/ */
public void publishStatus(String payload) { public void publishStatus(String payload) {
publish(CommonConfig.MQTT_TOPIC_STATUS, payload); publish(MQTT_TOPIC_STATUS, payload);
} }
/** /**
@@ -356,7 +376,7 @@ public class MqttManager {
Logger.e(TAG, "reportHeartbeat: 设备序列号为空,跳过心跳"); Logger.e(TAG, "reportHeartbeat: 设备序列号为空,跳过心跳");
return; return;
} }
publish(CommonConfig.MQTT_TOPIC_STATUS, buildStatusPayload(sn, SystemUtils.isScreenOn(mContext))); publish(MQTT_TOPIC_STATUS, buildStatusPayload(sn, SystemUtils.isScreenOn(mContext)));
} }
/** /**
@@ -371,7 +391,7 @@ public class MqttManager {
Logger.e(TAG, "reportScreenState: 设备序列号为空,跳过上报"); Logger.e(TAG, "reportScreenState: 设备序列号为空,跳过上报");
return; return;
} }
publish(CommonConfig.MQTT_TOPIC_STATUS, buildStatusPayload(sn, screenOn)); publish(MQTT_TOPIC_STATUS, buildStatusPayload(sn, screenOn));
} }
/** /**