Browse Source

add face auth

main
MTing 2 weeks ago
parent
commit
c80396a9de
  1. 243
      app/src/main/java/com/ouxuan/oxface/MainActivity.java

243
app/src/main/java/com/ouxuan/oxface/MainActivity.java

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

Loading…
Cancel
Save