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
相关产品推荐
相关产品推荐

