From 503c37b700a4f2e96d4f583ba58127b1ba88b3d6 Mon Sep 17 00:00:00 2001 From: MTing Date: Thu, 11 Sep 2025 15:24:29 +0800 Subject: [PATCH] add huawei scan in test --- app/build.gradle | 3 + .../main/java/com/ouxuan/oxface/DebugActivity.java | 55 +++++++++ .../ouxuan/oxface/device/HuaWeiScanManager.java | 123 +++++++++++++++++++++ .../device/HuaWeiScanManagerUsageExample.java | 83 ++++++++++++++ app/src/main/res/layout/activity_debug.xml | 35 ++++++ build.gradle | 15 +++ oxplugin_padface/build.gradle | 4 +- settings.gradle | 2 + 8 files changed, 318 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/ouxuan/oxface/device/HuaWeiScanManager.java create mode 100644 app/src/main/java/com/ouxuan/oxface/device/HuaWeiScanManagerUsageExample.java diff --git a/app/build.gradle b/app/build.gradle index 705f5fd..d4225fa 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -88,6 +88,9 @@ dependencies { // 添加对orbbec_module-debug.aar的依赖,通过flatDir方式 implementation(name: 'orbbec_module-debug', ext: 'aar') + + // 华为扫码库 + implementation "com.huawei.hms:scanplus:2.12.0.301" testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' diff --git a/app/src/main/java/com/ouxuan/oxface/DebugActivity.java b/app/src/main/java/com/ouxuan/oxface/DebugActivity.java index 74229c1..2d44e00 100644 --- a/app/src/main/java/com/ouxuan/oxface/DebugActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/DebugActivity.java @@ -22,6 +22,7 @@ import com.baidu.idl.face.main.finance.listener.SdkInitListener; import com.baidu.idl.face.main.finance.manager.FaceSDKManager; import com.ouxuan.oxface.device.DeviceUtils; +import com.ouxuan.oxface.device.HuaWeiScanManager; import com.ouxuan.oxface.network.utils.NetworkUtils; import com.ouxuan.oxface.utils.AutoStartManager; import com.ouxuan.oxface.utils.BootSimulationHelper; @@ -198,6 +199,15 @@ public class DebugActivity extends Activity { checkDeviceConfig(); } }); + + // 华为扫码测试按钮 + Button btnTestHuaWeiScan = findViewById(R.id.btnTestHuaWeiScan); + btnTestHuaWeiScan.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + testHuaWeiScan(); + } + }); } /** @@ -518,6 +528,26 @@ public class DebugActivity extends Activity { } /** + * 测试华为扫码功能 + */ + private void testHuaWeiScan() { + logMessage("触发华为扫码测试..."); + HuaWeiScanManager.doScan(this, new HuaWeiScanManager.ScanResultListener() { + @Override + public void onScanSuccess(String scanResult) { + logMessage("华为扫码成功: " + scanResult); + showToast("扫码成功: " + scanResult); + } + + @Override + public void onScanFailed(int errorCode, String errorMsg) { + logMessage("华为扫码失败 - 错误码: " + errorCode + ", 错误信息: " + errorMsg); + showToast("扫码失败: " + errorMsg); + } + }); + } + + /** * 在日志输出区域添加消息 * @param message 要添加的消息 */ @@ -552,4 +582,29 @@ public class DebugActivity extends Activity { } }); } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + // 处理华为扫码结果 + boolean handled = HuaWeiScanManager.handleScanResult(requestCode, resultCode, data, new HuaWeiScanManager.ScanResultListener() { + @Override + public void onScanSuccess(String scanResult) { + logMessage("华为扫码成功: " + scanResult); + showToast("扫码成功: " + scanResult); + } + + @Override + public void onScanFailed(int errorCode, String errorMsg) { + logMessage("华为扫码失败 - 错误码: " + errorCode + ", 错误信息: " + errorMsg); + showToast("扫码失败: " + errorMsg); + } + }); + + if (!handled) { + // 如果没有处理扫码结果,可以在这里处理其他ActivityResult + logMessage("未处理扫码结果,继续处理其他ActivityResult"); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/ouxuan/oxface/device/HuaWeiScanManager.java b/app/src/main/java/com/ouxuan/oxface/device/HuaWeiScanManager.java new file mode 100644 index 0000000..6ebad53 --- /dev/null +++ b/app/src/main/java/com/ouxuan/oxface/device/HuaWeiScanManager.java @@ -0,0 +1,123 @@ +package com.ouxuan.oxface.device; + +import android.app.Activity; +import android.content.Intent; +import android.util.Log; + +import com.huawei.hms.hmsscankit.ScanUtil; +import com.huawei.hms.ml.scan.HmsScan; +import com.huawei.hms.ml.scan.HmsScanAnalyzerOptions; + +/** + * 华为统一扫码管理器 + * 用于调起华为扫码功能并处理扫码结果 + */ +public class HuaWeiScanManager { + private static final String TAG = "HuaWeiScanManager"; + + // 请求码 + public static final int REQUEST_CODE_SCAN = 1003; + + // 扫码结果监听器 + public interface ScanResultListener { + /** + * 扫码成功回调 + * @param scanResult 扫码结果 + */ + void onScanSuccess(String scanResult); + + /** + * 扫码失败回调 + * @param errorCode 错误码 + * @param errorMsg 错误信息 + */ + void onScanFailed(int errorCode, String errorMsg); + } + + /** + * 执行调起华为扫码功能 + * @param activity 当前Activity + * @param listener 扫码结果监听器 + */ + public static void doScan(Activity activity, ScanResultListener listener) { + Log.d(TAG, "执行调起华为扫码功能"); + + try { + // 创建扫码选项 + HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator() + .setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE) + .setPhotoMode(false) + .setShowGuide(true) + .setViewType(1) + .create(); + + // 调用ScanUtil.startScan方法 + ScanUtil.startScan(activity, REQUEST_CODE_SCAN, options); + } catch (Exception e) { + Log.e(TAG, "调起华为扫码功能失败: " + e.getMessage(), e); + if (listener != null) { + listener.onScanFailed(-1, "调起扫码功能失败: " + e.getMessage()); + } + } + } + + /** + * 处理扫码结果 + * 需要在Activity的onActivityResult方法中调用此方法 + * + * @param requestCode 请求码 + * @param resultCode 结果码 + * @param data 返回数据 + * @param listener 扫码结果监听器 + * @return 是否处理了扫码结果 + */ + public static boolean handleScanResult(int requestCode, int resultCode, Intent data, ScanResultListener listener) { + if (requestCode == REQUEST_CODE_SCAN) { + if (resultCode == Activity.RESULT_OK && data != null) { + // 获取扫码结果 + HmsScan scanResult = data.getParcelableExtra(ScanUtil.RESULT); + if (scanResult != null && listener != null) { + listener.onScanSuccess(scanResult.originalValue); + Log.d(TAG, "扫码成功: " + scanResult.originalValue); + return true; + } else { + if (listener != null) { + listener.onScanFailed(-2, "扫码结果为空"); + } + Log.w(TAG, "扫码结果为空"); + return true; + } + } else { + if (listener != null) { + listener.onScanFailed(resultCode, "扫码取消或失败"); + } + Log.w(TAG, "扫码取消或失败, resultCode: " + resultCode); + return true; + } + } + return false; + } + + /** + * 简化版扫码方法,不使用监听器 + * @param activity 当前Activity + */ + public static void doScan(Activity activity) { + Log.d(TAG, "执行调起华为扫码功能(简化版)"); + + try { + // 创建扫码选项 + HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator() + .setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE) + .setPhotoMode(false) + .setShowGuide(true) + .setViewType(1) + .create(); + + // 调用ScanUtil.startScan方法 + ScanUtil.startScan(activity, REQUEST_CODE_SCAN, options); + } catch (Exception e) { + Log.e(TAG, "调起华为扫码功能失败: " + e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ouxuan/oxface/device/HuaWeiScanManagerUsageExample.java b/app/src/main/java/com/ouxuan/oxface/device/HuaWeiScanManagerUsageExample.java new file mode 100644 index 0000000..2636943 --- /dev/null +++ b/app/src/main/java/com/ouxuan/oxface/device/HuaWeiScanManagerUsageExample.java @@ -0,0 +1,83 @@ +package com.ouxuan.oxface.device; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.widget.Toast; + +import com.ouxuan.oxface.device.HuaWeiScanManager; + +/** + * HuaWeiScanManager使用示例 + * 展示如何在Activity中使用HuaWeiScanManager进行扫码 + */ +public class HuaWeiScanManagerUsageExample extends Activity { + private static final String TAG = "ScanUsageExample"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // setContentView(R.layout.activity_scan_example); + + // 调用扫码功能示例 + startScan(); + } + + /** + * 启动扫码 + */ + private void startScan() { + HuaWeiScanManager.doScan(this, new HuaWeiScanManager.ScanResultListener() { + @Override + public void onScanSuccess(String scanResult) { + Log.d(TAG, "扫码成功: " + scanResult); + Toast.makeText(HuaWeiScanManagerUsageExample.this, "扫码结果: " + scanResult, Toast.LENGTH_LONG).show(); + // 处理扫码结果 + handleScanResult(scanResult); + } + + @Override + public void onScanFailed(int errorCode, String errorMsg) { + Log.e(TAG, "扫码失败, 错误码: " + errorCode + ", 错误信息: " + errorMsg); + Toast.makeText(HuaWeiScanManagerUsageExample.this, "扫码失败: " + errorMsg, Toast.LENGTH_LONG).show(); + } + }); + } + + /** + * 处理扫码结果 + * @param scanResult 扫码结果 + */ + private void handleScanResult(String scanResult) { + // 在这里处理扫码结果 + // 例如:解析二维码内容、跳转页面等 + Log.d(TAG, "处理扫码结果: " + scanResult); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + // 处理扫码结果 + boolean handled = HuaWeiScanManager.handleScanResult(requestCode, resultCode, data, new HuaWeiScanManager.ScanResultListener() { + @Override + public void onScanSuccess(String scanResult) { + Log.d(TAG, "扫码成功: " + scanResult); + Toast.makeText(HuaWeiScanManagerUsageExample.this, "扫码结果: " + scanResult, Toast.LENGTH_LONG).show(); + handleScanResult(scanResult); + } + + @Override + public void onScanFailed(int errorCode, String errorMsg) { + Log.e(TAG, "扫码失败, 错误码: " + errorCode + ", 错误信息: " + errorMsg); + Toast.makeText(HuaWeiScanManagerUsageExample.this, "扫码失败: " + errorMsg, Toast.LENGTH_LONG).show(); + } + }); + + if (!handled) { + // 如果没有处理扫码结果,可以在这里处理其他ActivityResult + Log.d(TAG, "未处理扫码结果,继续处理其他ActivityResult"); + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_debug.xml b/app/src/main/res/layout/activity_debug.xml index 857bac2..47198a8 100644 --- a/app/src/main/res/layout/activity_debug.xml +++ b/app/src/main/res/layout/activity_debug.xml @@ -213,6 +213,41 @@ + + + +