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

Android Java中IntentIntegrator类已废弃,求ZXing替代方案

替换废弃的com.google.zxing.integration.android.IntentIntegrator方案(基于ZXing)

1. 替换依赖

旧的ZXing集成依赖已废弃,改用官方维护的zxing-android-embedded库,在Module级别的build.gradle(或build.gradle.kts)中添加以下依赖:

implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
implementation 'com.google.zxing:core:3.4.1'

2. 替换IntentIntegrator代码

旧的IntentIntegrator来自com.google.zxing.integration.android包,现在替换为com.journeyapps.barcodescanner包下的同名类,API逻辑基本兼容,迁移成本极低:

基础扫码初始化(兼容旧写法)

import com.journeyapps.barcodescanner.IntentIntegrator;

// 初始化扫码器,写法和旧代码几乎一致
IntentIntegrator integrator = new IntentIntegrator(QrCodeActivity.this);
// 可选:配置扫码参数(比如只识别QR码)
integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE);
integrator.setPrompt("请对准二维码扫描");
integrator.setBeepEnabled(true); // 扫码成功提示音
// 启动扫码(推荐换成Activity Result API替代已废弃的startActivityForResult)
integrator.initiateScan();

推荐:使用Activity Result API(替代已废弃的startActivityForResult)

Android官方已废弃startActivityForResult,推荐用ActivityResultLauncher处理扫码结果:

步骤1:注册结果回调

import com.journeyapps.barcodescanner.IntentIntegrator;
import com.journeyapps.barcodescanner.IntentResult;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;

private ActivityResultLauncher<Intent> scanLauncher;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_qr_code);

    // 注册扫码结果回调
    scanLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
        if (result.getResultCode() == RESULT_OK && result.getData() != null) {
            IntentResult scanResult = IntentIntegrator.parseActivityResult(result.getResultCode(), result.getData());
            if (scanResult != null) {
                if (scanResult.getContents() == null) {
                    // 用户取消扫码
                    Toast.makeText(this, "扫码已取消", Toast.LENGTH_SHORT).show();
                } else {
                    // 获取扫码内容,处理业务逻辑
                    String qrContent = scanResult.getContents();
                    // 示例:显示扫码结果
                    Toast.makeText(this, "扫码结果:" + qrContent, Toast.LENGTH_LONG).show();
                }
            }
        }
    });
}

步骤2:启动扫码

// 初始化扫码配置
IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE);
integrator.setPrompt("请扫描二维码");
integrator.setCameraId(0); // 0=后置摄像头,1=前置
// 创建扫码Intent并启动
Intent scanIntent = integrator.createScanIntent();
scanLauncher.launch(scanIntent);

3. 处理相机权限

Android 6.0及以上版本需要动态申请相机权限,扫码前需确保权限已获取:

检查并申请权限

import android.Manifest;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

// 启动扫码前先检查权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
    // 申请相机权限
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 100);
} else {
    // 权限已获取,启动扫码
    Intent scanIntent = integrator.createScanIntent();
    scanLauncher.launch(scanIntent);
}

处理权限申请结果

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 100) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 用户同意权限,启动扫码
            IntentIntegrator integrator = new IntentIntegrator(this);
            integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE);
            Intent scanIntent = integrator.createScanIntent();
            scanLauncher.launch(scanIntent);
        } else {
            Toast.makeText(this, "需要相机权限才能进行扫码", Toast.LENGTH_SHORT).show();
        }
    }
}

说明

旧的com.google.zxing.integration.android.IntentIntegrator属于ZXing早期的集成方案,已停止维护。zxing-android-embedded是官方推荐的替代库,支持最新Android版本,兼容旧API的同时,修复了大量适配问题,包括Android 13+的权限逻辑、深色模式适配等。

内容的提问来源于stack exchange,提问作者Daniele Ferreira da Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:17:13