You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android ML Kit谷歌代码扫描器:如何使用捆绑模型避免模块下载等待?

解决方案:使用ML Kit独立捆绑式条码扫描库

1. 替换依赖库

移除原有的com.google.android.gms:play-services-code-scanner依赖,改用ML Kit的独立捆绑式条码扫描库(模型已内置,无需动态下载):

// 核心条码扫描库(捆绑模型)
implementation 'com.google.mlkit:barcode-scanning:17.2.0'
// 可选:官方条码扫描UI库(如需现成的扫描界面)
implementation 'com.google.mlkit:barcode-scanning-ui:17.2.0'

2. 修改AndroidManifest配置

删除原有的com.google.mlkit.vision.DEPENDENCIES meta-data配置(捆绑模型无需预下载模块),若之前的配置仅针对条码UI模块,直接移除即可。

3. 调整扫描代码

方式一:使用官方扫描UI(推荐)

替换原有的CodeScanner相关代码,改用ML Kit提供的BarcodeScanningActivity启动扫描界面:

// 定义请求码
private static final int SCAN_REQUEST_CODE = 100;

// 启动扫描界面
public void startBarcodeScan() {
    Intent intent = new BarcodeScanningActivity.IntentBuilder()
            .setBarcodeFormats(Barcode.FORMAT_ALL_FORMATS) // 可指定特定格式,如FORMAT_QR_CODE
            .build(this);
    startActivityForResult(intent, SCAN_REQUEST_CODE);
}

// 处理扫描结果
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == SCAN_REQUEST_CODE && resultCode == RESULT_OK) {
        Barcode barcode = BarcodeScanningActivity.getScanResult(data);
        if (barcode != null) {
            // 获取扫描结果
            String scanResult = barcode.getRawValue();
            // 后续处理逻辑
        }
    }
}

方式二:自定义扫描界面

若需自定义扫描UI,直接使用核心扫描库进行帧处理(以CameraX为例):

// 配置扫描选项
BarcodeScannerOptions options = new BarcodeScannerOptions.Builder()
        .setBarcodeFormats(Barcode.FORMAT_QR_CODE, Barcode.FORMAT_EAN_13)
        .build();

// 创建扫描器实例
BarcodeScanner scanner = BarcodeScanning.getClient(options);

// 处理相机帧
imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(this), imageProxy -> {
    @SuppressLint("UnsafeOptInUsageError")
    Image image = imageProxy.getImage();
    if (image != null) {
        InputImage inputImage = InputImage.fromMediaImage(image, imageProxy.getImageInfo().getRotationDegrees());
        scanner.process(inputImage)
                .addOnSuccessListener(barcodes -> {
                    // 处理扫描到的条码
                    for (Barcode barcode : barcodes) {
                        String rawValue = barcode.getRawValue();
                    }
                })
                .addOnFailureListener(e -> {
                    // 处理扫描失败
                })
                .addOnCompleteListener(task -> {
                    imageProxy.close();
                });
    }
});

关键说明

  • 捆绑式库会将条码扫描模型打包进APK,APK体积会增加约几MB,但彻底避免了动态下载和初始化等待的问题。
  • 可根据需求调整ML Kit库的版本号,建议使用最新稳定版。

内容的提问来源于stack exchange,提问作者Android_programmer_office

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 01:03:28