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

如何在使用IntentIntegrator时区分两个扫码按钮的返回结果?

区分两个扫码按钮的请求结果(IntentIntegrator版)

嘿,这个场景我做项目时也碰到过!其实IntentIntegrator早就提供了自定义请求码的方法,只是默认没显式用而已,咱们改几处代码就能搞定:

第一步:给两个按钮的扫码请求分配不同请求码

把原来的无参scan()调用改成带请求码的,比如第一个按钮传1,第二个传2:

ibBinScan.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        scan(1); // 对应ibBinScan的请求码
    }
});
ibNumberScan.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        scan(2); // 对应ibNumberScan的请求码
    }
});

第二步:修改扫码方法,绑定自定义请求码

把你的scanNow()改成带参数的方法,核心是调用IntentIntegrator.setRequestCode()传入咱们的自定义码:

public void scan(int requestCode) {
    IntentIntegrator integrator = new IntentIntegrator(InboundActivity.this);
    integrator.setCaptureActivity(Portait.class);
    integrator.setOrientationLocked(false);
    integrator.setBeepEnabled(false);
    integrator.setBarcodeImageEnabled(false);
    integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
    integrator.setPrompt("Scan Barcode");
    integrator.setRequestCode(requestCode); // 关键:给当前扫码请求打上唯一标识
    integrator.initiateScan();
}

第三步:在onActivityResult里区分处理结果

现在就能通过requestCode精准判断是哪个按钮发起的扫码了,同时别忘了用IntentIntegrator.parseActivityResult()先验证是不是扫码的结果:

@SuppressLint("SetTextI18n")
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if (result != null) {
        if (result.getContents() == null) {
            // 扫码被取消的情况,可加提示
            Toast.makeText(this, "扫码已取消", Toast.LENGTH_SHORT).show();
        } else {
            // 根据请求码分情况处理
            if (requestCode == 1) {
                // 处理ibBinScan按钮的扫码结果
                String scannedBinCode = result.getContents();
                // 比如赋值给对应的输入框:etBin.setText(scannedBinCode);
            } else if (requestCode == 2) {
                // 处理ibNumberScan按钮的扫码结果
                String scannedNumberCode = result.getContents();
                // etNumber.setText(scannedNumberCode);
            }
        }
    } else {
        // 非扫码请求的结果,交给父类处理
        super.onActivityResult(requestCode, resultCode, data);
    }
}

本质就是给每个扫码请求绑定唯一的请求码标记,在回调里通过这个标记区分来源,完全不需要改动IntentIntegrator的底层逻辑~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:07:26