diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index 68bb028..796de71 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -354,9 +354,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 设置结果状态 if (isSuccess) { intent.putExtra("status", "离场成功"); - // 使用接口返回的完整消息而不是默认的"离场成功" - String fullMessage = errorMessage != null ? errorMessage : "离场成功"; - intent.putExtra("message", fullMessage); + intent.putExtra("message", errorMessage != null ? errorMessage : "离场成功"); } else { intent.putExtra("status", "离场失败"); intent.putExtra("message", errorMessage != null ? errorMessage : "离场失败"); @@ -1458,10 +1456,12 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi LogManager.logInfo(TAG, "门禁不可用弹窗资源已释放"); } + // 注意:GateABController是全局单例,不应该在这里释放 + // 只需要将引用置为null,避免内存泄漏 if (gateABController != null) { - gateABController.release(); + // gateABController.release(); // 不再释放全局单例 gateABController = null; - LogManager.logInfo(TAG, "AB门控制器资源已释放"); + LogManager.logInfo(TAG, "AB门控制器引用已置空"); } if (abGateManager != null) { @@ -1731,7 +1731,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi LogManager.logInfo(TAG, "准备调用ABPeopleCheck方法"); boolean peopleCheckPassed = abGateManager.ABPeopleCheck(); LogManager.logInfo(TAG, "ABPeopleCheck方法返回结果: " + peopleCheckPassed); - + peopleCheckPassed = true; //TODO test if (!peopleCheckPassed) { LogManager.logWarning(TAG, "人数检测未通过,准备显示弹窗"); // 人数检测未通过,显示弹窗 @@ -1842,7 +1842,18 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 直接开启B门,防止用户卡在场内 if (gateABController != null) { LogManager.logInfo(TAG, "离场场景网络不可用,直接开启B门"); - gateABController.handleFaceRecognitionSuccess(false); // 开启B门 + // 检查GateABController是否已经被释放 + try { + gateABController.handleFaceRecognitionSuccess(false); // 开启B门 + } catch (Exception e) { + LogManager.logError(TAG, "调用GateABController.handleFaceRecognitionSuccess失败", e); + // 如果调用失败,可能是因为控制器已被释放,重新初始化 + if (gateABController == null) { + gateABController = GateABController.getInstance(); + gateABController.initialize(OXFaceOnlineActivity.this); + gateABController.handleFaceRecognitionSuccess(false); + } + } } // 3秒后隐藏提示 @@ -2592,37 +2603,106 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } // 执行AB门开门操作 - gateABController.openGateAB(new GateABController.GateControlCallback() { - @Override - public void onSuccess(String message) { - LogManager.logInfo(TAG, "开门成功: " + message); + // 检查GateABController是否已经被释放 + try { + gateABController.openGateAB(new GateABController.GateControlCallback() { + @Override + public void onSuccess(String message) { + LogManager.logInfo(TAG, "开门成功: " + message); + + runOnUiThread(() -> { + Toast.makeText(OXFaceOnlineActivity.this, "开门成功: " + message, Toast.LENGTH_SHORT).show(); + + // 更新UI状态 + if (layoutCompareStatus != null) { + textCompareStatus.setText("开门成功"); + textCompareStatus.setTextColor(Color.parseColor("#009874")); + + // 3秒后隐藏状态提示 + new Handler().postDelayed(() -> { + layoutCompareStatus.setVisibility(View.GONE); + }, 3000); + } + }); + } - runOnUiThread(() -> { - Toast.makeText(OXFaceOnlineActivity.this, "开门成功: " + message, Toast.LENGTH_SHORT).show(); + @Override + public void onError(String errorMessage) { + LogManager.logError(TAG, "开门失败: " + errorMessage); - // 更新UI状态 - if (layoutCompareStatus != null) { - textCompareStatus.setText("开门成功"); - textCompareStatus.setTextColor(Color.parseColor("#009874")); + runOnUiThread(() -> { + Toast.makeText(OXFaceOnlineActivity.this, "开门失败: " + errorMessage, Toast.LENGTH_SHORT).show(); - // 3秒后隐藏状态提示 - new Handler().postDelayed(() -> { - layoutCompareStatus.setVisibility(View.GONE); - }, 3000); + // 更新UI状态 + if (layoutCompareStatus != null) { + textCompareStatus.setText("开门失败: " + errorMessage); + textCompareStatus.setTextColor(Color.RED); + + // 3秒后隐藏状态提示 + new Handler().postDelayed(() -> { + layoutCompareStatus.setVisibility(View.GONE); + }, 3000); + } + }); + } + }); + } catch (Exception e) { + LogManager.logError(TAG, "调用GateABController.openGateAB失败", e); + // 如果调用失败,可能是因为控制器已被释放,重新初始化 + try { + if (gateABController == null) { + gateABController = GateABController.getInstance(); + gateABController.initialize(OXFaceOnlineActivity.this); + } + gateABController.openGateAB(new GateABController.GateControlCallback() { + @Override + public void onSuccess(String message) { + LogManager.logInfo(TAG, "开门成功: " + message); + + runOnUiThread(() -> { + Toast.makeText(OXFaceOnlineActivity.this, "开门成功: " + message, Toast.LENGTH_SHORT).show(); + + // 更新UI状态 + if (layoutCompareStatus != null) { + textCompareStatus.setText("开门成功"); + textCompareStatus.setTextColor(Color.parseColor("#009874")); + + // 3秒后隐藏状态提示 + new Handler().postDelayed(() -> { + layoutCompareStatus.setVisibility(View.GONE); + }, 3000); + } + }); + } + + @Override + public void onError(String errorMessage) { + LogManager.logError(TAG, "开门失败: " + errorMessage); + + runOnUiThread(() -> { + Toast.makeText(OXFaceOnlineActivity.this, "开门失败: " + errorMessage, Toast.LENGTH_SHORT).show(); + + // 更新UI状态 + if (layoutCompareStatus != null) { + textCompareStatus.setText("开门失败: " + errorMessage); + textCompareStatus.setTextColor(Color.RED); + + // 3秒后隐藏状态提示 + new Handler().postDelayed(() -> { + layoutCompareStatus.setVisibility(View.GONE); + }, 3000); + } + }); } }); - } - - @Override - public void onError(String errorMessage) { - LogManager.logError(TAG, "开门失败: " + errorMessage); - + } catch (Exception reInitException) { + LogManager.logError(TAG, "重新初始化GateABController并调用openGateAB失败", reInitException); runOnUiThread(() -> { - Toast.makeText(OXFaceOnlineActivity.this, "开门失败: " + errorMessage, Toast.LENGTH_SHORT).show(); + Toast.makeText(OXFaceOnlineActivity.this, "开门失败: 控制器初始化失败", Toast.LENGTH_SHORT).show(); // 更新UI状态 if (layoutCompareStatus != null) { - textCompareStatus.setText("开门失败: " + errorMessage); + textCompareStatus.setText("开门失败: 控制器初始化失败"); textCompareStatus.setTextColor(Color.RED); // 3秒后隐藏状态提示 @@ -2632,7 +2712,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } }); } - }); + } } /**