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