8 changed files with 318 additions and 2 deletions
-
3app/build.gradle
-
55app/src/main/java/com/ouxuan/oxface/DebugActivity.java
-
123app/src/main/java/com/ouxuan/oxface/device/HuaWeiScanManager.java
-
83app/src/main/java/com/ouxuan/oxface/device/HuaWeiScanManagerUsageExample.java
-
35app/src/main/res/layout/activity_debug.xml
-
15build.gradle
-
4oxplugin_padface/build.gradle
-
2settings.gradle
@ -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); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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"); |
||||
|
} |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue