Browse Source

fix stop camera

devab
MTing 4 weeks ago
parent
commit
ec4003ba21
  1. 39
      app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java

39
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 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 boolean isCameraPausedByDialog = false; // 标记是否由对话框暂停
private int pauseRequestCount = 0; // 暂停请求计数 private int pauseRequestCount = 0; // 暂停请求计数
@ -462,7 +462,8 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
@Override @Override
public void navigateToOrderSelectionPage(String orderData, int verificationType, String faceBase64) { public void navigateToOrderSelectionPage(String orderData, int verificationType, String faceBase64) {
// 在跳转到订单选择页面时暂停摄像头 // 在跳转到订单选择页面时暂停摄像头
pauseCameraWithTimeout();
// pauseCameraWithTimeout();
pauseCamera();
LogManager.logInfo(TAG, "跳转订单选择页面时暂停摄像头"); LogManager.logInfo(TAG, "跳转订单选择页面时暂停摄像头");
// 跳转到订单选择页面 // 跳转到订单选择页面
@ -797,7 +798,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
LogManager.logInfo(TAG, "门禁不可用弹窗显示,暂停摄像头和中断操作 - " + sceneInfo); LogManager.logInfo(TAG, "门禁不可用弹窗显示,暂停摄像头和中断操作 - " + sceneInfo);
// 暂停摄像头和中断其他操作 // 暂停摄像头和中断其他操作
pauseCameraWithTimeout();
pauseCamera();
LogManager.logInfo(TAG, "摄像头暂停完成 - " + sceneInfo); LogManager.logInfo(TAG, "摄像头暂停完成 - " + sceneInfo);
} }
@ -1338,7 +1339,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
LogManager.logInfo(TAG, "用户点击验证码开门"); LogManager.logInfo(TAG, "用户点击验证码开门");
// 使用新的暂停摄像头方法 // 使用新的暂停摄像头方法
pauseCameraWithTimeout();
pauseCamera();
LogManager.logInfo(TAG, "暂停摄像头预览 - 使用带超时的暂停方法"); LogManager.logInfo(TAG, "暂停摄像头预览 - 使用带超时的暂停方法");
// 启动验证码Activity // 启动验证码Activity
@ -1643,7 +1644,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
if (gateABController != null) { if (gateABController != null) {
// 暂停摄像头预览10秒后再恢复避免频繁执行开门操作 // 暂停摄像头预览10秒后再恢复避免频繁执行开门操作
pauseCameraWithTimeout();
pauseCamera();
LogManager.logInfo(TAG, "暂停摄像头预览10秒,避免频繁执行开门操作"); LogManager.logInfo(TAG, "暂停摄像头预览10秒,避免频繁执行开门操作");
// 10秒后恢复摄像头预览 // 10秒后恢复摄像头预览
@ -2205,7 +2206,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
@Override @Override
public void onDialogShow() { public void onDialogShow() {
// 暂停摄像头预览 // 暂停摄像头预览
pauseCameraWithTimeout();
pauseCamera();
LogManager.logInfo(TAG, "解锁密码弹窗显示,摄像头已暂停"); LogManager.logInfo(TAG, "解锁密码弹窗显示,摄像头已暂停");
} }
@ -2784,7 +2785,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
String action = intent.getAction(); String action = intent.getAction();
if ("com.ouxuan.oxface.ACTION_PAUSE_CAMERA".equals(action)) { if ("com.ouxuan.oxface.ACTION_PAUSE_CAMERA".equals(action)) {
// 暂停摄像头预览 // 暂停摄像头预览
pauseCameraWithTimeout();
pauseCamera();
LogManager.logInfo(TAG, "接收到暂停摄像头预览广播"); LogManager.logInfo(TAG, "接收到暂停摄像头预览广播");
} else if ("com.ouxuan.oxface.ACTION_RESUME_CAMERA".equals(action)) { } 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() { private void pauseCameraWithTimeout() {

Loading…
Cancel
Save