From ec4003ba21b682a5133df851f324682872f13fdb Mon Sep 17 00:00:00 2001 From: MTing Date: Wed, 17 Sep 2025 18:14:34 +0800 Subject: [PATCH] fix stop camera --- .../com/ouxuan/oxface/OXFaceOnlineActivity.java | 39 ++++++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index 20e575d..89c6d04 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -191,7 +191,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 摄像头暂停管理相关 private Handler cameraTimeoutHandler; - private static final int CAMERA_RESUME_TIMEOUT = 60000; // 30秒超时 + private static final int CAMERA_RESUME_TIMEOUT = 60000; // 60秒超时 private boolean isCameraPausedByDialog = false; // 标记是否由对话框暂停 private int pauseRequestCount = 0; // 暂停请求计数 @@ -462,7 +462,8 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi @Override public void navigateToOrderSelectionPage(String orderData, int verificationType, String faceBase64) { // 在跳转到订单选择页面时暂停摄像头 - pauseCameraWithTimeout(); +// pauseCameraWithTimeout(); + pauseCamera(); LogManager.logInfo(TAG, "跳转订单选择页面时暂停摄像头"); // 跳转到订单选择页面 @@ -797,7 +798,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi LogManager.logInfo(TAG, "门禁不可用弹窗显示,暂停摄像头和中断操作 - " + sceneInfo); // 暂停摄像头和中断其他操作 - pauseCameraWithTimeout(); + pauseCamera(); LogManager.logInfo(TAG, "摄像头暂停完成 - " + sceneInfo); } @@ -1338,7 +1339,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi LogManager.logInfo(TAG, "用户点击验证码开门"); // 使用新的暂停摄像头方法 - pauseCameraWithTimeout(); + pauseCamera(); LogManager.logInfo(TAG, "暂停摄像头预览 - 使用带超时的暂停方法"); // 启动验证码Activity @@ -1643,7 +1644,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi if (gateABController != null) { // 暂停摄像头预览10秒后再恢复,避免频繁执行开门操作 - pauseCameraWithTimeout(); + pauseCamera(); LogManager.logInfo(TAG, "暂停摄像头预览10秒,避免频繁执行开门操作"); // 10秒后恢复摄像头预览 @@ -2205,7 +2206,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi @Override public void onDialogShow() { // 暂停摄像头预览 - pauseCameraWithTimeout(); + pauseCamera(); LogManager.logInfo(TAG, "解锁密码弹窗显示,摄像头已暂停"); } @@ -2784,7 +2785,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi String action = intent.getAction(); if ("com.ouxuan.oxface.ACTION_PAUSE_CAMERA".equals(action)) { // 暂停摄像头预览 - pauseCameraWithTimeout(); + pauseCamera(); LogManager.logInfo(TAG, "接收到暂停摄像头预览广播"); } else if ("com.ouxuan.oxface.ACTION_RESUME_CAMERA".equals(action)) { // 恢复摄像头预览 @@ -2795,6 +2796,30 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } /** + * 暂停摄像头 + */ + private void pauseCamera() { + pauseRequestCount++; + isCameraPausedByDialog = true; + isNeedCamera = false; + + // 取消之前的超时任务 + if (cameraTimeoutHandler != null) { + cameraTimeoutHandler.removeCallbacksAndMessages(null); + } + + // 清空一次画布,确保暂停时画面干净 + try { + LivenessModel emptyModel = new LivenessModel(); + emptyModel.setTrackFaceInfo(null); + showFrame(emptyModel); + } catch (Exception e) { + LogManager.logError(TAG, "清空画布时发生异常", e); + } + + LogManager.logInfo(TAG, "摄像头已暂停,请求计数: " + pauseRequestCount + ", 超时时间: " + "ms"); + } + /** * 暂停摄像头并设置超时恢复 */ private void pauseCameraWithTimeout() {