Browse Source

add licence save & init face sdk

main
MTing 2 weeks ago
parent
commit
c10c0dd2e0
  1. 217
      app/src/main/java/com/ouxuan/oxface/MainActivity.java
  2. 82
      app/src/main/java/com/ouxuan/oxface/data/DeviceSelectDataManager.java

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

@ -693,6 +693,9 @@ public class MainActivity extends AppCompatActivity {
android.util.Log.d("MainActivity", "API Message: " + deviceSelectDataManager.getApiResponseMessage());
android.util.Log.d("MainActivity", "===============================");
// 新增检查并初始化人脸SDK
initializeFaceSDKIfNeeded();
dialog.dismiss();
// 这里可以添加跳转到主界面的逻辑
@ -724,6 +727,220 @@ public class MainActivity extends AppCompatActivity {
});
}
/**
* 检查是否需要初始化人脸SDK并在需要时执行初始化
*/
private void initializeFaceSDKIfNeeded() {
try {
// 检查是否有人脸识别许可证
if (deviceSelectDataManager.hasFaceLicense()) {
String faceLicense = deviceSelectDataManager.getFaceLicense();
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);
}
}).start();
} else {
String logMessage = "未检测到有效的人脸识别许可证,跳过人脸SDK初始化";
android.util.Log.w("MainActivity", logMessage);
LogManager.logWarning("FaceSDK", logMessage);
}
} catch (Exception e) {
String logMessage = "检查人脸SDK初始化条件时发生异常: " + e.getMessage();
android.util.Log.e("MainActivity", logMessage, e);
LogManager.logError("FaceSDK", logMessage, e);
}
}
/**
* 初始化人脸SDK
* @param faceLicense 人脸识别许可证
*/
private void initializeFaceSDK(String faceLicense) {
try {
String logMessage = "开始人脸SDK初始化流程...";
android.util.Log.d("MainActivity", logMessage);
LogManager.logInfo("FaceSDK", logMessage);
// 获取FaceSDKManager实例
com.baidu.idl.face.main.finance.manager.FaceSDKManager faceSDKManager =
com.baidu.idl.face.main.finance.manager.FaceSDKManager.getInstance();
// 创建同步锁以等待初始化完成
final Object initLock = new Object();
final boolean[] initCompleted = {false};
final boolean[] initSuccess = {false};
// 在主线程中执行初始化
runOnUiThread(new Runnable() {
@Override
public void run() {
faceSDKManager.init(MainActivity.this, faceLicense, new com.baidu.idl.face.main.finance.listener.SdkInitListener() {
@Override
public void initStart() {
String logMessage = "人脸SDK授权初始化开始...";
android.util.Log.d("MainActivity", logMessage);
LogManager.logInfo("FaceSDK", logMessage);
}
@Override
public void initLicenseSuccess() {
String logMessage = "人脸SDK授权成功";
android.util.Log.d("MainActivity", logMessage);
LogManager.logInfo("FaceSDK", logMessage);
// 授权成功后继续初始化模型
initFaceModels(faceSDKManager, initLock, initCompleted, initSuccess);
}
@Override
public void initLicenseFail(int errorCode, String msg) {
String logMessage = "人脸SDK授权失败 - 错误码: " + errorCode + ", 错误信息: " + msg;
android.util.Log.e("MainActivity", logMessage);
LogManager.logError("FaceSDK", logMessage);
synchronized (initLock) {
initCompleted[0] = true;
initSuccess[0] = false;
initLock.notifyAll();
}
}
@Override
public void initModelSuccess() {
// 这个回调在init方法中不会触发
}
@Override
public void initModelFail(int errorCode, String msg) {
// 这个回调在init方法中不会触发
}
});
}
});
// 等待初始化完成最多等待30秒
synchronized (initLock) {
if (!initCompleted[0]) {
try {
initLock.wait(30000); // 等待最多30秒
} catch (InterruptedException e) {
logMessage = "人脸SDK初始化等待被中断: " + e.getMessage();
android.util.Log.e("MainActivity", logMessage);
LogManager.logError("FaceSDK", logMessage);
}
}
}
// 检查初始化结果
if (initSuccess[0]) {
logMessage = "人脸SDK初始化成功";
android.util.Log.d("MainActivity", logMessage);
LogManager.logInfo("FaceSDK", logMessage);
runOnUiThread(new Runnable() {
@Override
public void run() {
showToast("人脸SDK初始化成功");
}
});
} else {
logMessage = "人脸SDK初始化失败";
android.util.Log.e("MainActivity", logMessage);
LogManager.logError("FaceSDK", logMessage);
runOnUiThread(new Runnable() {
@Override
public void run() {
showToast("人脸SDK初始化失败");
}
});
}
} 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());
}
});
}
}
/**
* 初始化人脸模型
* @param faceSDKManager FaceSDKManager实例
* @param initLock 初始化同步锁
* @param initCompleted 初始化完成标志
* @param initSuccess 初始化成功标志
*/
private void initFaceModels(com.baidu.idl.face.main.finance.manager.FaceSDKManager faceSDKManager,
Object initLock, boolean[] initCompleted, boolean[] initSuccess) {
try {
String logMessage = "开始初始化人脸模型...";
android.util.Log.d("MainActivity", logMessage);
LogManager.logInfo("FaceSDK", logMessage);
faceSDKManager.initModel(this, new com.baidu.idl.face.main.finance.listener.SdkInitListener() {
@Override
public void initStart() {
String logMessage = "人脸模型初始化开始...";
android.util.Log.d("MainActivity", logMessage);
LogManager.logInfo("FaceSDK", logMessage);
}
@Override
public void initLicenseSuccess() {
// 授权已在initFaceSDK中处理
}
@Override
public void initLicenseFail(int errorCode, String msg) {
// 授权已在initFaceSDK中处理
}
@Override
public void initModelSuccess() {
String logMessage = "人脸SDK模型初始化成功";
android.util.Log.d("MainActivity", logMessage);
LogManager.logInfo("FaceSDK", logMessage);
synchronized (initLock) {
initCompleted[0] = true;
initSuccess[0] = true;
initLock.notifyAll();
}
}
@Override
public void initModelFail(int errorCode, String msg) {
String logMessage = "人脸SDK模型初始化失败 - 错误码: " + errorCode + ", 错误信息: " + msg;
android.util.Log.e("MainActivity", logMessage);
LogManager.logError("FaceSDK", logMessage);
synchronized (initLock) {
initCompleted[0] = true;
initSuccess[0] = false;
initLock.notifyAll();
}
}
});
} catch (Exception e) {
String logMessage = "初始化人脸模型时发生异常: " + e.getMessage();
android.util.Log.e("MainActivity", logMessage, e);
LogManager.logError("FaceSDK", logMessage, e);
synchronized (initLock) {
initCompleted[0] = true;
initSuccess[0] = false;
initLock.notifyAll();
}
}
}
@Override
protected void onResume() {
super.onResume();

82
app/src/main/java/com/ouxuan/oxface/data/DeviceSelectDataManager.java

@ -32,6 +32,9 @@ public class DeviceSelectDataManager {
private static final String KEY_API_RESPONSE_MESSAGE = "api_response_message";
private static final String KEY_API_FULL_RESPONSE = "api_full_response";
// 新增人脸识别许可证存储常量
private static final String KEY_FACE_LICENSE = "face_license";
private SharedPreferences preferences;
private Gson gson;
@ -42,6 +45,8 @@ public class DeviceSelectDataManager {
private PadApiService.PadSelectResponse currentSelectResponse;
private PadApiService.PadInfo currentSelectedPadInfo;
private boolean isDeviceSelected = false;
// 新增人脸识别许可证内存缓存
private String faceLicense;
// API响应存储
private int apiResponseCode;
@ -93,6 +98,8 @@ public class DeviceSelectDataManager {
// 将data对象转换为JSON字符串
if (apiResponse.getData() != null) {
this.apiResponseDataJson = gson.toJson(apiResponse.getData());
// 新增提取并保存faceLicense
extractAndSaveFaceLicense(apiResponse.getData());
}
// 将完整响应转换为JSON字符串
@ -123,6 +130,11 @@ public class DeviceSelectDataManager {
editor.putString(KEY_API_RESPONSE_MESSAGE, apiResponseMessage);
editor.putString(KEY_API_FULL_RESPONSE, apiFullResponse);
// 新增保存人脸识别许可证
if (faceLicense != null && !faceLicense.isEmpty()) {
editor.putString(KEY_FACE_LICENSE, faceLicense);
}
editor.apply();
Log.d(TAG, "完整API响应数据保存成功");
@ -238,6 +250,8 @@ public class DeviceSelectDataManager {
this.apiResponseDataJson = null;
this.apiResponseMessage = null;
this.apiFullResponse = null;
// 新增清除人脸识别许可证内存缓存
this.faceLicense = null;
// 清除持久化存储
SharedPreferences.Editor editor = preferences.edit();
@ -255,6 +269,9 @@ public class DeviceSelectDataManager {
editor.remove(KEY_API_RESPONSE_MESSAGE);
editor.remove(KEY_API_FULL_RESPONSE);
// 新增清除人脸识别许可证持久化存储
editor.remove(KEY_FACE_LICENSE);
editor.apply();
Log.d(TAG, "设备选择数据已清除");
@ -292,9 +309,23 @@ public class DeviceSelectDataManager {
apiResponseMessage = preferences.getString(KEY_API_RESPONSE_MESSAGE, null);
apiFullResponse = preferences.getString(KEY_API_FULL_RESPONSE, null);
// 新增加载人脸识别许可证
faceLicense = preferences.getString(KEY_FACE_LICENSE, null);
if (apiResponseCode > 0 || (apiResponseDataJson != null && !apiResponseDataJson.isEmpty())) {
Log.d(TAG, "从本地存储恢复API响应数据成功");
}
// 如果有API响应数据但没有faceLicense尝试从响应数据中提取
if ((apiResponseCode > 0 || (apiResponseDataJson != null && !apiResponseDataJson.isEmpty()))
&& (faceLicense == null || faceLicense.isEmpty())) {
try {
PadApiService.PadSelectResponse response = gson.fromJson(apiResponseDataJson, PadApiService.PadSelectResponse.class);
extractAndSaveFaceLicense(response);
} catch (Exception e) {
Log.e(TAG, "从API响应数据中提取人脸识别许可证失败: " + e.getMessage());
}
}
} catch (Exception e) {
Log.e(TAG, "加载设备选择数据失败: " + e.getMessage());
// 清除可能损坏的数据
@ -345,6 +376,9 @@ public class DeviceSelectDataManager {
this.currentSelectedPadInfo = selectedPadInfo;
this.isDeviceSelected = true;
// 新增提取并保存faceLicense
extractAndSaveFaceLicense(selectResponse);
// 保存到持久化存储
SharedPreferences.Editor editor = preferences.edit();
editor.putString(KEY_SELECT_RESPONSE, gson.toJson(selectResponse));
@ -361,6 +395,12 @@ public class DeviceSelectDataManager {
editor.putLong(KEY_VALID_UNTIL, selectResponse.getValidUntil());
editor.putLong(KEY_SELECT_TIME, System.currentTimeMillis());
editor.putBoolean(KEY_IS_DEVICE_SELECTED, true);
// 新增保存人脸识别许可证
if (faceLicense != null && !faceLicense.isEmpty()) {
editor.putString(KEY_FACE_LICENSE, faceLicense);
}
editor.apply();
Log.d(TAG, "设备选择数据保存成功");
@ -488,4 +528,46 @@ public class DeviceSelectDataManager {
Log.i(TAG, "==============================");
}
/**
* 从PadSelectResponse中提取人脸识别许可证并保存到内存缓存
* @param response PadSelectResponse对象
*/
private void extractAndSaveFaceLicense(PadApiService.PadSelectResponse response) {
try {
if (response != null && response.getPadConfig() != null) {
String license = response.getPadConfig().getFaceLicense();
if (license != null && !license.isEmpty()) {
this.faceLicense = license;
Log.d(TAG, "人脸识别许可证提取成功,长度: " + license.length());
} else {
Log.w(TAG, "人脸识别许可证为空或不存在");
}
} else {
Log.w(TAG, "无法提取人脸识别许可证:PadSelectResponse或PadConfig为空");
}
} catch (Exception e) {
Log.e(TAG, "提取人脸识别许可证失败: " + e.getMessage(), e);
}
}
/**
* 获取人脸识别许可证
* @return 人脸识别许可证字符串
*/
public String getFaceLicense() {
if (faceLicense != null) {
return faceLicense;
}
return preferences.getString(KEY_FACE_LICENSE, "");
}
/**
* 检查是否存在有效的人脸识别许可证
* @return true如果存在有效的人脸识别许可证
*/
public boolean hasFaceLicense() {
String license = getFaceLicense();
return license != null && !license.isEmpty();
}
}
Loading…
Cancel
Save