diff --git a/app/src/main/java/com/ouxuan/oxface/MainActivity.java b/app/src/main/java/com/ouxuan/oxface/MainActivity.java index 549cad3..8e6933d 100644 --- a/app/src/main/java/com/ouxuan/oxface/MainActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/MainActivity.java @@ -496,22 +496,8 @@ public class MainActivity extends AppCompatActivity { // 显示loading文字 buttonText.setText("正在进入..."); - // 使用Handler延时5秒后执行 - new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { - @Override - public void run() { - // 恢复按钮状态 - buttonEnter.setEnabled(true); - buttonText.setText(originalText); - - // 显示成功消息并关闭弹框 - showToast("进入 " + selectedPlatform + " 成功!"); - dialog.dismiss(); - currentDialog = null; // 清除引用 - - // 这里可以添加跳转到主界面的逻辑 - } - }, 5000); // 5秒延时 + // 注意:这里不再使用延时,而是通过设备选择和SDK初始化流程来控制 + // 实际的进入操作会在selectPadAndEnter方法中处理 } /** @@ -706,12 +692,7 @@ public class MainActivity extends AppCompatActivity { android.util.Log.d("MainActivity", "==============================="); // 新增:检查并初始化人脸SDK - initializeFaceSDKIfNeeded(); - - dialog.dismiss(); - currentDialog = null; // 清除引用 - - // 这里可以添加跳转到主界面的逻辑 + initializeFaceSDKIfNeeded(dialog, buttonEnter, buttonText, originalText); } @Override @@ -743,67 +724,100 @@ public class MainActivity extends AppCompatActivity { /** * 检查是否需要初始化人脸SDK并在需要时执行初始化 */ - private void initializeFaceSDKIfNeeded() { + private void initializeFaceSDKIfNeeded(Dialog dialog, View buttonEnter, TextView buttonText, String originalText) { try { // 检查是否有人脸识别许可证 if (deviceSelectDataManager.hasFaceLicense()) { String faceLicense = deviceSelectDataManager.getFaceLicense(); - String logMessage = "检测到人脸识别许可证,开始初始化人脸SDK,许可证长度: " + + String logMessage = "检测到人脸识别许可证,开始初始化人脸SDK,许可证长度: " + (faceLicense != null ? faceLicense.length() : 0); android.util.Log.d("MainActivity", logMessage); LogManager.logInfo("FaceSDK", logMessage); - + // 在后台线程中初始化人脸SDK new Thread(new Runnable() { @Override public void run() { - initializeFaceSDK(faceLicense); + initializeFaceSDK(faceLicense, dialog, buttonEnter, buttonText, originalText); } }).start(); } else { - String logMessage = "未检测到有效的人脸识别许可证,跳过人脸SDK初始化"; + String logMessage = "未检测到有效的人脸识别许可证,跳过人脸SDK初始化,直接进入人脸识别界面"; android.util.Log.w("MainActivity", logMessage); LogManager.logWarning("FaceSDK", logMessage); + + // 没有人脸识别许可证,直接进入人脸识别界面 + runOnUiThread(new Runnable() { + @Override + public void run() { + enterFaceRecognitionActivity(dialog); + } + }); } } catch (Exception e) { String logMessage = "检查人脸SDK初始化条件时发生异常: " + e.getMessage(); android.util.Log.e("MainActivity", logMessage, e); LogManager.logError("FaceSDK", logMessage, e); + + // 发生异常时,直接进入人脸识别界面 + enterFaceRecognitionActivity(dialog); } } - + /** * 初始化人脸SDK * @param faceLicense 人脸识别许可证 */ - private void initializeFaceSDK(String faceLicense) { + private void initializeFaceSDK(String faceLicense, Dialog dialog, View buttonEnter, TextView buttonText, String originalText) { try { String logMessage = "开始人脸SDK初始化流程..."; android.util.Log.d("MainActivity", logMessage); LogManager.logInfo("FaceSDK", logMessage); - + // 先检查和初始化配置文件 final boolean configSuccess = initAndCheckFaceConfig(this); - + // 在UI线程显示配置文件状态提示 runOnUiThread(new Runnable() { @Override public void run() { - Toast.makeText(MainActivity.this, - configSuccess ? "配置文件加载成功" : "初始配置失败,已重置为默认配置", + Toast.makeText(MainActivity.this, + configSuccess ? "配置文件加载成功" : "已加载默认配置", Toast.LENGTH_SHORT).show(); } }); - + // 获取FaceSDKManager实例 - com.baidu.idl.face.main.finance.manager.FaceSDKManager faceSDKManager = + com.baidu.idl.face.main.finance.manager.FaceSDKManager faceSDKManager = com.baidu.idl.face.main.finance.manager.FaceSDKManager.getInstance(); - + + // 检查设备是否已经授权 + if (faceSDKManager.initStatus == com.baidu.idl.face.main.finance.manager.FaceSDKManager.SDK_INIT_SUCCESS || + faceSDKManager.initStatus == com.baidu.idl.face.main.finance.manager.FaceSDKManager.SDK_MODEL_LOAD_SUCCESS) { + String alreadyAuthorizedMessage = "设备已授权,无需重复授权"; + android.util.Log.d("MainActivity", alreadyAuthorizedMessage); + LogManager.logInfo("FaceSDK", alreadyAuthorizedMessage); + + // 获取并记录授权信息 + String licenseData = faceSDKManager.getLicenseData(this); + LogManager.logInfo("FaceSDK", "设备授权有效期至: " + licenseData); + + // 直接进入人脸识别界面 + runOnUiThread(new Runnable() { + @Override + public void run() { + showToast("设备已授权"); + enterFaceRecognitionActivity(dialog); + } + }); + return; + } + // 创建同步锁以等待初始化完成 final Object initLock = new Object(); final boolean[] initCompleted = {false}; final boolean[] initSuccess = {false}; - + // 在主线程中执行初始化 runOnUiThread(new Runnable() { @Override @@ -822,7 +836,7 @@ public class MainActivity extends AppCompatActivity { android.util.Log.d("MainActivity", logMessage); LogManager.logInfo("FaceSDK", logMessage); // 授权成功后继续初始化模型 - initFaceModels(faceSDKManager, initLock, initCompleted, initSuccess); + initFaceModels(faceSDKManager, initLock, initCompleted, initSuccess, dialog, buttonEnter, buttonText, originalText); } @Override @@ -835,6 +849,14 @@ public class MainActivity extends AppCompatActivity { initSuccess[0] = false; initLock.notifyAll(); } + + // 授权失败时,仍然进入人脸识别界面 + runOnUiThread(new Runnable() { + @Override + public void run() { + enterFaceRecognitionActivity(dialog); + } + }); } @Override @@ -849,7 +871,7 @@ public class MainActivity extends AppCompatActivity { }); } }); - + // 等待初始化完成(最多等待30秒) synchronized (initLock) { if (!initCompleted[0]) { @@ -862,7 +884,7 @@ public class MainActivity extends AppCompatActivity { } } } - + // 检查初始化结果 if (initSuccess[0]) { logMessage = "人脸SDK初始化成功"; @@ -872,33 +894,39 @@ public class MainActivity extends AppCompatActivity { @Override public void run() { showToast("人脸SDK初始化成功"); + // 进入人脸识别界面 + enterFaceRecognitionActivity(dialog); } }); } else { - logMessage = "人脸SDK初始化失败"; + logMessage = "人脸SDK初始化失败,但仍进入人脸识别界面"; android.util.Log.e("MainActivity", logMessage); LogManager.logError("FaceSDK", logMessage); runOnUiThread(new Runnable() { @Override public void run() { - showToast("人脸SDK初始化失败"); + showToast("人脸SDK初始化失败,但仍进入人脸识别界面"); + // 即使初始化失败,也进入人脸识别界面 + enterFaceRecognitionActivity(dialog); } }); } - + } catch (Exception e) { String logMessage = "初始化人脸SDK时发生异常: " + e.getMessage(); android.util.Log.e("MainActivity", logMessage, e); LogManager.logError("FaceSDK", logMessage, e); runOnUiThread(new Runnable() { - @Override - public void run() { - showToast("人脸SDK初始化异常: " + e.getMessage()); - } - }); + @Override + public void run() { + showToast("人脸SDK初始化异常: " + e.getMessage()); + // 发生异常时,仍然进入人脸识别界面 + enterFaceRecognitionActivity(dialog); + } + }); } } - + /** * 初始化人脸模型 * @param faceSDKManager FaceSDKManager实例 @@ -906,16 +934,17 @@ public class MainActivity extends AppCompatActivity { * @param initCompleted 初始化完成标志 * @param initSuccess 初始化成功标志 */ - private void initFaceModels(com.baidu.idl.face.main.finance.manager.FaceSDKManager faceSDKManager, - Object initLock, boolean[] initCompleted, boolean[] initSuccess) { + private void initFaceModels(com.baidu.idl.face.main.finance.manager.FaceSDKManager faceSDKManager, + Object initLock, boolean[] initCompleted, boolean[] initSuccess, + Dialog dialog, View buttonEnter, TextView buttonText, String originalText) { try { String logMessage = "开始初始化人脸模型..."; android.util.Log.d("MainActivity", logMessage); LogManager.logInfo("FaceSDK", logMessage); - + // 在初始化模型前再次检查配置文件,确保配置已正确加载 initAndCheckFaceConfig(this); - + faceSDKManager.initModel(this, new com.baidu.idl.face.main.finance.listener.SdkInitListener() { @Override public void initStart() { @@ -944,6 +973,14 @@ public class MainActivity extends AppCompatActivity { initSuccess[0] = true; initLock.notifyAll(); } + + // 模型初始化成功后,进入人脸识别界面 + runOnUiThread(new Runnable() { + @Override + public void run() { + enterFaceRecognitionActivity(dialog); + } + }); } @Override @@ -956,6 +993,14 @@ public class MainActivity extends AppCompatActivity { initSuccess[0] = false; initLock.notifyAll(); } + + // 即使模型初始化失败,也进入人脸识别界面 + runOnUiThread(new Runnable() { + @Override + public void run() { + enterFaceRecognitionActivity(dialog); + } + }); } }); } catch (Exception e) { @@ -967,9 +1012,61 @@ public class MainActivity extends AppCompatActivity { initSuccess[0] = false; initLock.notifyAll(); } + + // 发生异常时,仍然进入人脸识别界面 + runOnUiThread(new Runnable() { + @Override + public void run() { + enterFaceRecognitionActivity(dialog); + } + }); } } - + + /** + * 进入人脸识别界面 + * @param dialog 弹框实例 + */ + private void enterFaceRecognitionActivity(Dialog dialog) { + try { + String logMessage = "准备进入人脸识别界面"; + android.util.Log.d("MainActivity", logMessage); + LogManager.logInfo("FaceSDK", logMessage); + + // 检查人脸SDK状态 + com.baidu.idl.face.main.finance.manager.FaceSDKManager faceSDKManager = + com.baidu.idl.face.main.finance.manager.FaceSDKManager.getInstance(); + + String sdkStatus = "SDK状态 - 授权: " + faceSDKManager.initStatus + ", 模型: " + faceSDKManager.initModelSuccess; + android.util.Log.d("MainActivity", sdkStatus); + LogManager.logInfo("FaceSDK", sdkStatus); + + // 关闭弹框 + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + currentDialog = null; // 清除引用 + + // 跳转到人脸识别界面 + Intent intent = new Intent(MainActivity.this, OXFaceOnlineActivity.class); + startActivity(intent); + + logMessage = "已启动人脸识别界面"; + android.util.Log.d("MainActivity", logMessage); + LogManager.logInfo("FaceSDK", logMessage); + } catch (Exception e) { + String logMessage = "进入人脸识别界面时发生异常: " + e.getMessage(); + android.util.Log.e("MainActivity", logMessage, e); + LogManager.logError("FaceSDK", logMessage, e); + + // 即使发生异常,也要确保弹框被关闭 + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + currentDialog = null; // 清除引用 + } + } + /** * 根据设备类型切换摄像头配置 * @param deviceType 设备类型,5表示第6批设备,其他值表示非第6批设备 @@ -977,22 +1074,22 @@ public class MainActivity extends AppCompatActivity { private void switchCameraByDeviceType(int deviceType) { try { // 获取FaceSDKManager实例 - com.baidu.idl.face.main.finance.manager.FaceSDKManager faceSDKManager = + com.baidu.idl.face.main.finance.manager.FaceSDKManager faceSDKManager = com.baidu.idl.face.main.finance.manager.FaceSDKManager.getInstance(); - + // 调用FaceSDKManager中的方法 faceSDKManager.switchCameraByDeviceType(deviceType); - + String logMessage = "已根据设备类型(" + deviceType + ")切换摄像头配置"; android.util.Log.d("MainActivity", logMessage); LogManager.logInfo("FaceSDK", logMessage); - + // 显示切换成功提示 runOnUiThread(new Runnable() { @Override public void run() { - Toast.makeText(MainActivity.this, - "摄像头配置已切换为" + (deviceType == 5 ? "第6批" : "非第6批") + "设备", + Toast.makeText(MainActivity.this, + "摄像头配置已切换为" + (deviceType == 5 ? "第6批" : "非第6批") + "设备", Toast.LENGTH_SHORT).show(); } }); @@ -1002,45 +1099,45 @@ public class MainActivity extends AppCompatActivity { LogManager.logError("FaceSDK", errorMessage, e); } } - + @Override protected void onResume() { super.onResume(); - + // 确保保持活跃功能正常运行 if (keepAliveManager != null && !keepAliveManager.isKeepingAlive()) { keepAliveManager.startKeepAlive(this); LogManager.logOperation("MainActivity", "恢复保持活跃状态"); } } - + @Override protected void onPause() { super.onPause(); - + // 24小时无人值守模式下,不停止保持活跃功能 LogManager.logDebug("MainActivity", "应用进入后台,但保持活跃状态继续运行"); } - + @Override protected void onDestroy() { super.onDestroy(); - + // 关闭任何正在显示的Dialog以防止WindowLeaked错误 if (currentDialog != null && currentDialog.isShowing()) { currentDialog.dismiss(); currentDialog = null; } - + LogManager.logOperation("MainActivity", "主界面正在销毁"); - + // 只在应用真正退出时才停止保持活跃 if (isFinishing() && keepAliveManager != null) { keepAliveManager.stopKeepAlive(this); LogManager.logOperation("MainActivity", "应用退出,停止保持活跃功能"); } } - + /** * 设置日志路径调试功能(长按登录按钮) */ @@ -1053,14 +1150,14 @@ public class MainActivity extends AppCompatActivity { return true; } }); - + // 添加长按版本号打开调试界面的功能 setupVersionLongClick(); - + // 添加双击测试功能 setupDoubleTapTest(); } - + /** * 设置长按版本号打开调试界面的功能 */ @@ -1098,7 +1195,7 @@ public class MainActivity extends AppCompatActivity { } } } - + /** * 打开调试界面 */