From e0136b3ddf774e051eaa4e2dff7595d91201c422 Mon Sep 17 00:00:00 2001 From: MT <3075067877@qq.com> Date: Mon, 15 Sep 2025 14:08:30 +0800 Subject: [PATCH] fix 4 rebuild code --- .../com/ouxuan/oxface/OXFaceOnlineActivity.java | 71 +++--------- .../com/ouxuan/oxface/device/GateABController.java | 124 +++++++++++++++++++++ 2 files changed, 140 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index cfd2a51..8eed3cf 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -53,8 +53,6 @@ import com.ouxuan.oxface.network.OrderVerificationResultHandler; import com.ouxuan.oxface.network.LeaveVerificationManager; import com.ouxuan.oxface.utils.VenueSceneUtils; import com.ouxuan.oxface.network.NetworkStatusIndicator; -import com.ouxuan.oxface.device.OxUDP; -import com.ouxuan.oxface.device.OxUDPUsageExample; import com.ouxuan.oxface.abgate.GateUnavailableDialog; import com.ouxuan.oxface.abgate.ABGateManager; import com.ouxuan.oxface.device.GateABController; @@ -196,10 +194,6 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 网络状态指示器 private NetworkStatusIndicator networkStatusIndicator; - // UDP门禁控制 - private OxUDPUsageExample udpExample; - private boolean isUDPInitialized = false; - // AB门禁不可用弹窗 private GateUnavailableDialog gateUnavailableDialog; private GateABController gateABController; @@ -226,9 +220,6 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi initView(); - // 初始化UDP门禁控制 - initializeUDPGateControl(); - // 初始化网络状态指示器 initNetworkStatusIndicator(); @@ -296,9 +287,9 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } // 离场校验成功后开启B门 - if (isUDPInitialized && udpExample != null) { + if (gateABController != null) { LogManager.logInfo(TAG, "离场校验成功,开启B门"); - udpExample.handleFaceRecognitionSuccess(false); // 参数保留兼容性,实际都开B门 + gateABController.handleFaceRecognitionSuccess(false); // 参数保留兼容性,实际都开B门 } } }); @@ -367,9 +358,9 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi @Override public void onVerificationSuccess(com.ouxuan.oxface.network.api.PadApiService.CheckOrderResult data, int verificationType) { // 订单核销成功后开启B门 - if (isUDPInitialized && udpExample != null) { + if (gateABController != null) { LogManager.logInfo(TAG, "订单核销成功,开启B门"); - udpExample.handleFaceRecognitionSuccess(true); // 参数保留兼容性,实际都开B门 + gateABController.handleFaceRecognitionSuccess(true); // 参数保留兼容性,实际都开B门 } // 然后处理原有的页面跳转逻辑 @@ -623,28 +614,6 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } /** - * 初始化UDP门禁控制 - */ - private void initializeUDPGateControl() { - try { - LogManager.logInfo(TAG, "开始初始化UDP门禁控制"); - - // 初始化UDP使用示例类 - udpExample = new OxUDPUsageExample(this); - - // 初始化UDP门禁功能 - udpExample.initializeInFaceActivity(); - - isUDPInitialized = true; - LogManager.logInfo(TAG, "UDP门禁控制初始化成功"); - - } catch (Exception e) { - LogManager.logError(TAG, "UDP门禁控制初始化失败", e); - isUDPInitialized = false; - } - } - - /** * 初始化网络状态指示器 */ private void initNetworkStatusIndicator() { @@ -779,13 +748,13 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 人数异常弹窗关闭后,恢复正常的门禁监控状态 try { // 检查UDP是否正常初始化,如果没有则重新初始化 - if (udpExample != null && !udpExample.isUDPInitialized()) { + if (gateABController != null && !gateABController.isUDPInitialized()) { LogManager.logInfo(TAG, "UDP未初始化,重新初始化UDP门禁控制"); - udpExample.initializeInFaceActivity(); + gateABController.reinitializeUDP(); // 稍等片刻后启动轮询,确保初始化完成 new Handler(Looper.getMainLooper()).postDelayed(() -> { - if (udpExample != null) { - udpExample.startGatePolling(); + if (gateABController != null) { + gateABController.startUDPPolling(); LogManager.logInfo(TAG, "UDP门禁状态轮询已重新启动"); } }, 500); @@ -893,8 +862,8 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } // 启动UDP门禁状态轮询 - if (isUDPInitialized && udpExample != null) { - udpExample.startGatePolling(); + if (gateABController != null && gateABController.isUDPInitialized()) { + gateABController.startUDPPolling(); LogManager.logInfo(TAG, "UDP门禁状态轮询已启动"); } @@ -1416,14 +1385,6 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi networkStatusIndicator = null; } - // 清理UDP门禁控制资源 - if (udpExample != null) { - udpExample.cleanup(); - udpExample = null; - LogManager.logInfo(TAG, "UDP门禁控制资源已清理"); - } - isUDPInitialized = false; - // 释放AB门禁管理和不可用弹窗资源 if (gateUnavailableDialog != null) { gateUnavailableDialog.release(); @@ -1491,8 +1452,8 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } // 停止UDP门禁状态轮询 - if (isUDPInitialized && udpExample != null) { - udpExample.stopGatePolling(); + if (gateABController != null) { + gateABController.stopUDPPolling(); LogManager.logInfo(TAG, "UDP门禁状态轮询已停止"); } @@ -1717,9 +1678,9 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi hideLoadingStatus(); // 直接开启B门 - if (isUDPInitialized && udpExample != null) { + if (gateABController != null) { LogManager.logInfo(TAG, "gate_enter_open_enable为true,直接开启B门"); - udpExample.handleFaceRecognitionSuccess(false); // 参数保留兼容性,实际都开B门 + gateABController.handleFaceRecognitionSuccess(false); // 参数保留兼容性,实际都开B门 } } }, 2000); @@ -1733,9 +1694,9 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi showLoadingStatus("网络不可用,直接开门"); // 直接开启B门,防止用户卡在场内 - if (isUDPInitialized && udpExample != null) { + if (gateABController != null) { LogManager.logInfo(TAG, "离场场景网络不可用,直接开启B门"); - udpExample.handleFaceRecognitionSuccess(false); // 开启B门 + gateABController.handleFaceRecognitionSuccess(false); // 开启B门 } // 3秒后隐藏提示 diff --git a/app/src/main/java/com/ouxuan/oxface/device/GateABController.java b/app/src/main/java/com/ouxuan/oxface/device/GateABController.java index ac0e7a1..feb727b 100644 --- a/app/src/main/java/com/ouxuan/oxface/device/GateABController.java +++ b/app/src/main/java/com/ouxuan/oxface/device/GateABController.java @@ -225,6 +225,8 @@ public class GateABController { // 初始化UDP控制器 if (udpController != null) { udpController.initUDP(context); + // 设置UDP状态监听器 + setupUDPStateListener(); LogManager.logInfo(TAG, "UDP控制器初始化完成"); } @@ -1069,6 +1071,128 @@ public class GateABController { }); } + // ========== UDP状态监听相关方法 ========== + + /** + * 设置UDP状态监听器 + */ + private void setupUDPStateListener() { + if (udpController == null) { + LogManager.logWarning(TAG, "UDP控制器为空,无法设置状态监听器"); + return; + } + + // 设置状态监听器 + udpController.setStateListener(new OxUDP.UDPStateListener() { + @Override + public void onGateStateUpdate(boolean gateAState, boolean gateBState, String rawData) { + LogManager.logInfo(TAG, "门禁状态更新 - A门: " + (gateAState ? "开启" : "关闭") + + ", B门: " + (gateBState ? "开启" : "关闭")); + + // 更新门状态到GateABController,UDP连接状态为true(能收到状态说明连接正常) + updateGateState(gateAState, gateBState, true, ""); + } + + @Override + public void onGateOpenResult(String gateType, boolean success) { + LogManager.logInfo(TAG, gateType + "门开启结果: " + (success ? "成功" : "失败")); + } + + @Override + public void onUDPError(String error) { + LogManager.logError(TAG, "UDP通信错误: " + error); + + // UDP通信错误时,设置连接状态为false,门状态为false(默认关闭) + updateGateState(false, false, false, error); + } + }); + + // 设置设备监听器 + udpController.setDeviceListener(new OxUDP.UDPDeviceListener() { + @Override + public void onDeviceInfoUpdate(String deviceInfo) { + LogManager.logInfo(TAG, "设备信息更新: " + deviceInfo); + } + + @Override + public void onDeviceConnectionChange(boolean connected) { + LogManager.logInfo(TAG, "设备连接状态: " + (connected ? "已连接" : "已断开")); + + if (connected) { + // 设备连接成功,开始轮询 + startUDPPolling(); + } else { + // 设备连接失败,设置UDP连接状态为false + updateGateState(false, false, false, "设备连接断开"); + } + } + }); + + LogManager.logInfo(TAG, "UDP状态监听器设置完成"); + } + + /** + * 开始UDP门禁状态轮询 + */ + public void startUDPPolling() { + if (udpController != null) { + LogManager.logInfo(TAG, "开始UDP门禁状态轮询"); + udpController.startPolling(); + } else { + LogManager.logWarning(TAG, "UDP控制器为空,无法开始轮询"); + } + } + + /** + * 停止UDP门禁状态轮询 + */ + public void stopUDPPolling() { + if (udpController != null) { + LogManager.logInfo(TAG, "停止UDP门禁状态轮询"); + udpController.stopPolling(); + } else { + LogManager.logWarning(TAG, "UDP控制器为空,无法停止轮询"); + } + } + + /** + * 重新初始化UDP控制器(用于恢复监听器链条) + */ + public void reinitializeUDP() { + if (context != null && udpController != null) { + LogManager.logInfo(TAG, "重新初始化UDP控制器"); + udpController.initUDP(context); + setupUDPStateListener(); + } else { + LogManager.logWarning(TAG, "无法重新初始化UDP,context或udpController为空"); + } + } + + /** + * 检查UDP是否已初始化 + * @return true表示UDP已初始化,false表示未初始化 + */ + public boolean isUDPInitialized() { + return udpController != null && udpController.isInitialized(); + } + + /** + * 人脸识别成功后开门处理 + * 无论进场还是离场,都开启B门 + * @param isEntry true: 进门, false: 出门(参数保留为兼容性,但不影响实际操作) + */ + public void handleFaceRecognitionSuccess(boolean isEntry) { + LogManager.logInfo(TAG, "人脸识别成功,准备开B门: " + (isEntry ? "进门场景" : "离场场景")); + + // 无论是进场还是离场,都开启B门 + if (udpController != null && udpController.isInitialized()) { + udpController.openGateB(); + LogManager.logInfo(TAG, "人脸识别成功,已发送B门开启命令"); + } else { + LogManager.logWarning(TAG, "UDP控制器未初始化,无法开启B门"); + } + } + /** * 门禁不可用监听器接口 * 扩展GateABStateListener,增加弹窗触发功能