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); } } }