2 个扫描仪,但一个 onActivityResult?

2 Scanners but one onActivityResult?

我正在 Android Studio 中开发移动应用程序并且有 2 个按钮。 每个按钮都会使用 Zxing 库启动 barcode/QR 扫描。

我遇到的问题是我将第一次扫描的结果分配给按钮文本并且工作正常。

但是,当涉及到将第二次扫描的结果分配给它的按钮时,它不起作用,因为只有一个 onActivityResult?

我知道如果我复制并粘贴代码并尝试覆盖 onActivityResult2,系统将忽略它,因为系统无法识别它。

但是,我该如何解决这个问题?

这是我的 onActivityResult 和 onActivityResult2 代码,只是为了展示我想要实现的目标:

onActivityResult:

工作代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);

    if (result != null) {
        //if qrcode has nothing in it
        if (result.getContents() == null) {
            Toast.makeText(this, "Result Not Found", Toast.LENGTH_LONG).show();
        } else {
            //if qr contains data
            try {
                //converting the data to json
                JSONObject obj = new JSONObject(result.getContents());

            } catch (JSONException e) {
                e.printStackTrace();
                if (buttonId == R.id.buttonScan) {
                    machineType = result.getContents();
                    scanBarcode.setText("Machine Type: " + machineType);
                } else if (buttonId == R.id.buttonScan2) {
                    workOrderNumber = result.getContents();
                    scanWorkOrder.setText("Work Order Number: " + workOrderNumber);
                }
                else if (buttonId == 0) {
                    ???
                }

            }
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

调用库的按钮:

private IntentIntegrator qrScan;
private IntentIntegrator qrScan2;

int buttonId = 0; //THIS IS GLOBAL

 //Initialise Buttons
    scanBarcode = findViewById(R.id.buttonScan);
    scanWorkOrder = findViewById(R.id.buttonScan2);
    submit = findViewById(R.id.buttonSubmit);

    sharedPreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);

    //Initialize Scanners
    qrScan = new IntentIntegrator(this);


    scanBarcode.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            qrScan.initiateScan();
            buttonId = R.id.buttonScan;
        }
    });

    scanWorkOrder.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            qrScan.initiateScan();
            buttonId = R.id.buttonScan2;

        }
    });

在遵循 overloading 规则时不能有两个完全相同的方法,所以

对于两个请求,您可以有两个不同的requestCode,稍后使用if语句来识别您的请求类型或按钮点击响应

startActivityForResult (intent, 100); // 100 for button 1
startActivityForResult (intent, 101); // 101 for button 2

ActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if (result != null) {
        //if qrcode has nothing in it
        if (result.getContents() == null) {
            Toast.makeText(this, "Result Not Found", Toast.LENGTH_LONG).show();
        } else {
            //if qr contains data
            try {
                //converting the data to json
                JSONObject obj = new JSONObject(result.getContents());

            } catch (JSONException e) {
                e.printStackTrace();

                workOrderNumber = result.getContents();
                if(requestCode == 100)
                    scanBarcode.setText("Machine Type: " + machineType);
                else if(requestCode == 101)
                    scanWorkOrder.setText("Work Order Number: " + workOrderNumber);                 
             }
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}
int buttonId = 0;

添加为全局变量。

buttonId = R.id.buttonScan;

添加到第一个按钮的 onClick。

buttonId = R.id.buttonScan2;

添加到第二个按钮的onClick。

检查您在 onActivityResult 中获得的内容并进行相应处理。