|
@ -175,6 +175,12 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi |
|
|
// 网络请求管理器 |
|
|
// 网络请求管理器 |
|
|
private OrderVerificationManager orderVerificationManager; |
|
|
private OrderVerificationManager orderVerificationManager; |
|
|
private OrderVerificationResultHandler orderVerificationResultHandler; |
|
|
private OrderVerificationResultHandler orderVerificationResultHandler; |
|
|
|
|
|
|
|
|
|
|
|
// 摄像头暂停管理相关 |
|
|
|
|
|
private Handler cameraTimeoutHandler; |
|
|
|
|
|
private static final int CAMERA_RESUME_TIMEOUT = 30000; // 30秒超时 |
|
|
|
|
|
private boolean isCameraPausedByDialog = false; // 标记是否由对话框暂停 |
|
|
|
|
|
private int pauseRequestCount = 0; // 暂停请求计数 |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
protected void onCreate(Bundle savedInstanceState) { |
|
|
protected void onCreate(Bundle savedInstanceState) { |
|
@ -280,6 +286,10 @@ 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(); |
|
|
|
|
|
LogManager.logInfo(TAG, "跳转订单选择页面时暂停摄像头"); |
|
|
|
|
|
|
|
|
// 跳转到订单选择页面 |
|
|
// 跳转到订单选择页面 |
|
|
Intent intent = new Intent(OXFaceOnlineActivity.this, OrderSelectionActivity.class); |
|
|
Intent intent = new Intent(OXFaceOnlineActivity.this, OrderSelectionActivity.class); |
|
|
intent.putExtra(OrderSelectionActivity.EXTRA_ORDER_DATA, orderData); |
|
|
intent.putExtra(OrderSelectionActivity.EXTRA_ORDER_DATA, orderData); |
|
@ -894,9 +904,9 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi |
|
|
private void handleVerificationCodeClick() { |
|
|
private void handleVerificationCodeClick() { |
|
|
LogManager.logInfo(TAG, "用户点击验证码开门"); |
|
|
LogManager.logInfo(TAG, "用户点击验证码开门"); |
|
|
|
|
|
|
|
|
// 暂停摄像头预览 |
|
|
|
|
|
isNeedCamera = false; |
|
|
|
|
|
LogManager.logInfo(TAG, "暂停摄像头预览 - isNeedCamera设置为false"); |
|
|
|
|
|
|
|
|
// 使用新的暂停摄像头方法 |
|
|
|
|
|
pauseCameraWithTimeout(); |
|
|
|
|
|
LogManager.logInfo(TAG, "暂停摄像头预览 - 使用带超时的暂停方法"); |
|
|
|
|
|
|
|
|
// 启动验证码Activity |
|
|
// 启动验证码Activity |
|
|
Intent intent = new Intent(this, VerificationCodeActivity.class); |
|
|
Intent intent = new Intent(this, VerificationCodeActivity.class); |
|
@ -1442,8 +1452,8 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi |
|
|
|
|
|
|
|
|
if (requestCode == 1001) { // 验证码验证获取输入结果 |
|
|
if (requestCode == 1001) { // 验证码验证获取输入结果 |
|
|
// 恢复摄像头预览 |
|
|
// 恢复摄像头预览 |
|
|
isNeedCamera = true; |
|
|
|
|
|
LogManager.logInfo(TAG, "恢复摄像头预览 - isNeedCamera设置为true"); |
|
|
|
|
|
|
|
|
resumeCamera(); |
|
|
|
|
|
LogManager.logInfo(TAG, "恢复摄像头预览 - 使用resumeCamera方法"); |
|
|
|
|
|
|
|
|
if (resultCode == RESULT_OK && data != null) { |
|
|
if (resultCode == RESULT_OK && data != null) { |
|
|
String verificationCode = data.getStringExtra("verification_code"); |
|
|
String verificationCode = data.getStringExtra("verification_code"); |
|
@ -1461,8 +1471,8 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi |
|
|
} |
|
|
} |
|
|
} else if (requestCode == 1002) { // 订单选择页面返回结果 |
|
|
} else if (requestCode == 1002) { // 订单选择页面返回结果 |
|
|
// 恢复摄像头预览 |
|
|
// 恢复摄像头预览 |
|
|
isNeedCamera = true; |
|
|
|
|
|
LogManager.logInfo(TAG, "恢复摄像头预览 - isNeedCamera设置为true"); |
|
|
|
|
|
|
|
|
resumeCamera(); |
|
|
|
|
|
LogManager.logInfo(TAG, "恢复摄像头预览 - 使用resumeCamera方法"); |
|
|
|
|
|
|
|
|
if (resultCode == RESULT_OK && data != null) { |
|
|
if (resultCode == RESULT_OK && data != null) { |
|
|
// 处理订单选择结果 |
|
|
// 处理订单选择结果 |
|
@ -1583,6 +1593,9 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi |
|
|
private void getCheckOrder() { |
|
|
private void getCheckOrder() { |
|
|
LogManager.logInfo(TAG, "开始查验订单列表,modeType: " + modeType); |
|
|
LogManager.logInfo(TAG, "开始查验订单列表,modeType: " + modeType); |
|
|
|
|
|
|
|
|
|
|
|
// 在网络请求开始时暂停摄像头 |
|
|
|
|
|
pauseCameraWithTimeout(); |
|
|
|
|
|
|
|
|
// 使用新的网络请求管理器执行验证 |
|
|
// 使用新的网络请求管理器执行验证 |
|
|
orderVerificationManager.performVerification(modeType, verifyCode, null); |
|
|
orderVerificationManager.performVerification(modeType, verifyCode, null); |
|
|
} |
|
|
} |
|
@ -1650,13 +1663,92 @@ 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)) { |
|
|
// 暂停摄像头预览 |
|
|
// 暂停摄像头预览 |
|
|
isNeedCamera = false; |
|
|
|
|
|
LogManager.logInfo(TAG, "接收到暂停摄像头预览广播 - isNeedCamera设置为false"); |
|
|
|
|
|
|
|
|
pauseCameraWithTimeout(); |
|
|
|
|
|
LogManager.logInfo(TAG, "接收到暂停摄像头预览广播"); |
|
|
} else if ("com.ouxuan.oxface.ACTION_RESUME_CAMERA".equals(action)) { |
|
|
} else if ("com.ouxuan.oxface.ACTION_RESUME_CAMERA".equals(action)) { |
|
|
// 恢复摄像头预览 |
|
|
// 恢复摄像头预览 |
|
|
isNeedCamera = true; |
|
|
|
|
|
LogManager.logInfo(TAG, "接收到恢复摄像头预览广播 - isNeedCamera设置为true"); |
|
|
|
|
|
|
|
|
resumeCamera(); |
|
|
|
|
|
LogManager.logInfo(TAG, "接收到恢复摄像头预览广播"); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 暂停摄像头并设置超时恢复 |
|
|
|
|
|
*/ |
|
|
|
|
|
private void pauseCameraWithTimeout() { |
|
|
|
|
|
pauseRequestCount++; |
|
|
|
|
|
isCameraPausedByDialog = true; |
|
|
|
|
|
isNeedCamera = false; |
|
|
|
|
|
|
|
|
|
|
|
// 取消之前的超时任务 |
|
|
|
|
|
if (cameraTimeoutHandler != null) { |
|
|
|
|
|
cameraTimeoutHandler.removeCallbacksAndMessages(null); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 设置新的超时任务 |
|
|
|
|
|
cameraTimeoutHandler = new Handler(); |
|
|
|
|
|
cameraTimeoutHandler.postDelayed(new Runnable() { |
|
|
|
|
|
@Override |
|
|
|
|
|
public void run() { |
|
|
|
|
|
LogManager.logWarning(TAG, "摄像头暂停超时,自动恢复并关闭所有对话框"); |
|
|
|
|
|
forceResumeAndCloseAllDialogs(); |
|
|
|
|
|
} |
|
|
|
|
|
}, CAMERA_RESUME_TIMEOUT); |
|
|
|
|
|
|
|
|
|
|
|
LogManager.logInfo(TAG, "摄像头已暂停,请求计数: " + pauseRequestCount + ", 超时时间: " + CAMERA_RESUME_TIMEOUT + "ms"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 恢复摄像头 |
|
|
|
|
|
*/ |
|
|
|
|
|
private void resumeCamera() { |
|
|
|
|
|
if (pauseRequestCount > 0) { |
|
|
|
|
|
pauseRequestCount--; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 只有当所有暂停请求都结束时才恢复 |
|
|
|
|
|
if (pauseRequestCount <= 0) { |
|
|
|
|
|
isCameraPausedByDialog = false; |
|
|
|
|
|
isNeedCamera = true; |
|
|
|
|
|
pauseRequestCount = 0; // 确保不为负数 |
|
|
|
|
|
|
|
|
|
|
|
// 取消超时任务 |
|
|
|
|
|
if (cameraTimeoutHandler != null) { |
|
|
|
|
|
cameraTimeoutHandler.removeCallbacksAndMessages(null); |
|
|
|
|
|
cameraTimeoutHandler = null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
LogManager.logInfo(TAG, "摄像头已恢复"); |
|
|
|
|
|
} else { |
|
|
|
|
|
LogManager.logInfo(TAG, "仍有暂停请求,暂不恢复摄像头,剩余请求数: " + pauseRequestCount); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 强制恢复摄像头并关闭所有对话框(超时后调用) |
|
|
|
|
|
*/ |
|
|
|
|
|
private void forceResumeAndCloseAllDialogs() { |
|
|
|
|
|
// 强制恢复摄像头 |
|
|
|
|
|
isCameraPausedByDialog = false; |
|
|
|
|
|
isNeedCamera = true; |
|
|
|
|
|
pauseRequestCount = 0; |
|
|
|
|
|
|
|
|
|
|
|
// 取消超时任务 |
|
|
|
|
|
if (cameraTimeoutHandler != null) { |
|
|
|
|
|
cameraTimeoutHandler.removeCallbacksAndMessages(null); |
|
|
|
|
|
cameraTimeoutHandler = null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 关闭所有可能的对话框(发送广播通知所有Activity关闭) |
|
|
|
|
|
try { |
|
|
|
|
|
Intent intent = new Intent("com.ouxuan.oxface.ACTION_FORCE_CLOSE_DIALOGS"); |
|
|
|
|
|
sendBroadcast(intent); |
|
|
|
|
|
LogManager.logInfo(TAG, "已发送强制关闭对话框广播"); |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
LogManager.logError(TAG, "发送强制关闭对话框广播失败", e); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
LogManager.logWarning(TAG, "摄像头已强制恢复,所有对话框已关闭"); |
|
|
|
|
|
} |
|
|
} |
|
|
} |