oxFaceAndroid
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
4.2 KiB

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