diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index 68d1621..e67a0ec 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -590,6 +590,24 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi private void initNetworkStatusIndicator() { try { networkStatusIndicator = new NetworkStatusIndicator(this, relativeLayout); + + // 设置网络恢复监听器 + networkStatusIndicator.setNetworkRecoveryListener(new NetworkStatusIndicator.NetworkRecoveryListener() { + @Override + public void onNetworkRecovered() { + LogManager.logInfo(TAG, "接收到网络恢复通知,恢复摄像头预览"); + // 网络恢复时恢复摄像头预览 + resumeCamera(); + } + + @Override + public void onNetworkLost() { + LogManager.logWarning(TAG, "接收到网络断开通知"); + // 网络断开时可以执行一些操作(可选) + // 例如:清理缓存、停止不必要的网络请求等 + } + }); + networkStatusIndicator.startMonitoring(); LogManager.logInfo(TAG, "网络状态指示器初始化完成"); } catch (Exception e) { @@ -1265,13 +1283,37 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 判断是进场还是离场场景 if (VenueSceneUtils.isLeaveScene(OXFaceOnlineActivity.this)) { - // 离场场景:调用离场校验 - LogManager.logInfo(TAG, "检测到离场场景,执行离场校验"); - performLeaveVerification(base64img); + // 离场场景:先检查网络状态 + if (isNetworkAvailable()) { + LogManager.logInfo(TAG, "检测到离场场景,网络可用,执行离场校验"); + performLeaveVerification(base64img); + } else { + LogManager.logWarning(TAG, "检测到离场场景,但网络不可用,跳过离场校验"); + showLoadingStatus("无网络..."); + // 3秒后隐藏提示 + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + hideLoadingStatus(); + } + }, 3000); + } } else { - // 进场场景:调用原有的订单核销方法 - LogManager.logInfo(TAG, "检测到进场场景,执行订单核销"); - getCheckOrder(); + // 进场场景:先检查网络状态 + if (isNetworkAvailable()) { + LogManager.logInfo(TAG, "检测到进场场景,网络可用,执行订单核销"); + getCheckOrder(); + } else { + LogManager.logWarning(TAG, "检测到进场场景,但网络不可用,跳过订单核销"); + showLoadingStatus("无网络..."); + // 3秒后隐藏提示 + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + hideLoadingStatus(); + } + }, 3000); + } } // 处理完成后重置标志 @@ -1923,4 +1965,34 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi LogManager.logWarning(TAG, "摄像头已强制恢复,所有对话框已关闭"); } + + /** + * 检查网络是否可用 + * @return true 如果网络可用,false 否则 + */ + private boolean isNetworkAvailable() { + try { + // 使用NetworkUtils检查网络连接状态 + if (!com.blankj.utilcode.util.NetworkUtils.isConnected()) { + LogManager.logWarning(TAG, "网络未连接"); + return false; + } + + // 进一步检查网络质量(可选) + if (networkStatusIndicator != null) { + NetworkStatusIndicator.NetworkStatus currentStatus = networkStatusIndicator.getCurrentNetworkStatus(); + if (currentStatus == NetworkStatusIndicator.NetworkStatus.POOR) { + LogManager.logWarning(TAG, "网络状态不佳:" + currentStatus.getDescription()); + return false; + } + } + + LogManager.logDebug(TAG, "网络状态正常"); + return true; + + } catch (Exception e) { + LogManager.logError(TAG, "检查网络状态失败", e); + return false; + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/ouxuan/oxface/network/NetworkStatusIndicator.java b/app/src/main/java/com/ouxuan/oxface/network/NetworkStatusIndicator.java index 13c1a44..581375e 100644 --- a/app/src/main/java/com/ouxuan/oxface/network/NetworkStatusIndicator.java +++ b/app/src/main/java/com/ouxuan/oxface/network/NetworkStatusIndicator.java @@ -43,6 +43,24 @@ public class NetworkStatusIndicator { private NetworkStatus currentNetworkStatus = NetworkStatus.POOR; // 默认为异常状态 private boolean isMonitoring = false; + // 网络恢复监听器 + private NetworkRecoveryListener networkRecoveryListener; + + /** + * 网络恢复监听器接口 + */ + public interface NetworkRecoveryListener { + /** + * 网络恢复时调用 + */ + void onNetworkRecovered(); + + /** + * 网络断开时调用 + */ + void onNetworkLost(); + } + // 网络状态枚举 public enum NetworkStatus { EXCELLENT(Color.parseColor("#00FF00"), "网络优秀"), // 绿色 @@ -95,6 +113,14 @@ public class NetworkStatusIndicator { } /** + * 设置网络恢复监听器 + * @param listener 监听器 + */ + public void setNetworkRecoveryListener(NetworkRecoveryListener listener) { + this.networkRecoveryListener = listener; + } + + /** * 初始化网络文字显示 */ private void initNetworkTextView() { @@ -225,11 +251,21 @@ public class NetworkStatusIndicator { (currentNetworkStatus == NetworkStatus.EXCELLENT || currentNetworkStatus == NetworkStatus.GOOD)) { Toast.makeText(context, "网络连接已恢复", Toast.LENGTH_SHORT).show(); LogManager.logInfo(TAG, "网络连接已恢复:" + currentNetworkStatus.getDescription()); + + // 通知监听器网络已恢复 + if (networkRecoveryListener != null) { + networkRecoveryListener.onNetworkRecovered(); + } } // 如果网络变为异常,也显示提示 else if (currentNetworkStatus == NetworkStatus.POOR && oldStatus != NetworkStatus.POOR) { Toast.makeText(context, "网络连接异常", Toast.LENGTH_SHORT).show(); LogManager.logWarning(TAG, "网络连接异常"); + + // 通知监听器网络已断开 + if (networkRecoveryListener != null) { + networkRecoveryListener.onNetworkLost(); + } } } });