You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.0 KiB
4.0 KiB
Fix 9 - 实时门禁监听修复验证
问题回顾
原始问题:当处于OrderSelectionActivity页面进行订单选择核销时,检测到A门打开了,但app没有立即关闭选择核销弹窗。
根本原因:之前只实现了静态检查(用户点击时检查),缺少实时监听门禁状态变化的机制。
修复方案
🔧 核心改动
1. 实现 GateUnavailableListener 接口
public class OrderSelectionActivity extends AppCompatActivity implements GateABController.GateUnavailableListener
2. 添加实时监听器注册
private void initGateStatusCheck() {
// 获取GateABController实例并设置监听器
gateController = GateABController.getInstance();
if (gateController != null) {
// 设置本 Activity 为门禁状态监听器
gateController.setGateStateListener(this);
LogManager.logInfo(TAG, "Fix 9 - 门禁状态实时监听初始化完成");
}
}
3. 实现关键回调方法
@Override
public void onGateUnavailable(String reason) {
LogManager.logWarning(TAG, "Fix 9 - 检测到门禁不可用,立即关闭订单选择页面。原因: " + reason);
runOnUiThread(() -> {
// 停止倒计时
stopCountdown();
// 设置结果为取消并关闭Activity
setResult(RESULT_CANCELED);
finish();
});
}
4. 资源清理
@Override
protected void onDestroy() {
// Fix 9: 清理门禁状态监听器
if (gateController != null) {
gateController.setGateStateListener(null);
}
}
🚀 工作流程
- Activity启动:OrderSelectionActivity创建时注册为门禁状态监听器
- 实时监听:GateABController实时监听UDP门禁状态变化
- 状态检测:当A门或B门状态变为开启时,GateABController触发onGateUnavailable回调
- 立即响应:OrderSelectionActivity接收回调后立即关闭Activity
- 资源清理:Activity销毁时清理监听器
📊 验证要点
测试场景1:A门开启
- 预期:OrderSelectionActivity立即关闭
- 验证:日志中应显示"Fix 9 - 检测到门禁不可用,立即关闭订单选择页面"
测试场景2:B门开启
- 预期:OrderSelectionActivity立即关闭
- 验证:同上
测试场景3:UDP连接断开
- 预期:根据场景判断是否关闭(离场设备可能不关闭)
- 验证:查看VenueSceneUtils.isLeaveScene()的判断逻辑
测试场景4:门禁状态恢复正常
- 预期:如果Activity已关闭,不会重新打开
- 验证:onGateAvailable被调用但Activity已销毁
🔍 关键技术点
-
多层检查机制:
- 静态检查(用户点击时)
- 实时监听(状态变化时)
-
线程安全:
- 使用runOnUiThread确保UI操作在主线程执行
-
资源管理:
- 注册监听器时保存引用
- onDestroy时清理监听器
-
异常处理:
- 所有关键操作都有try-catch保护
✅ 修复验证
根据用户提供的日志:
2025-09-14 19:46:58.397 GateUnavailableDialog: 更新门状态异常弹窗内容: 检测到A门开启,请先关闭A门
2025-09-14 19:46:58.399 GateUnavailableDialog: 弹窗已显示,仅更新内容
修复前:只有GateUnavailableDialog更新了内容,OrderSelectionActivity没有响应 修复后:OrderSelectionActivity会通过onGateUnavailable回调立即关闭
🎯 预期效果
当用户在订单选择页面时,如果A门打开:
- GateABController检测到A门状态变化
- 触发updateGateState方法
- 调用OrderSelectionActivity的onGateUnavailable
- OrderSelectionActivity立即关闭
- 用户返回到主界面,看到门禁不可用弹窗
总结
Fix 9 现在提供了完整的实时门禁状态监听机制,确保当门禁状态在OrderSelectionActivity显示期间发生异常时,能够立即响应并关闭Activity,从而提升用户体验和系统安全性。