|
|
@ -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 { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 打开调试界面 |
|
|
|
*/ |
|
|
|