2

正如标题所说,我正在尝试扫描一维条码,到目前为止我有以下代码:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);        
    }

    public void test(View view){

        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.putExtra("SCAN_MODE", "1D_CODE_MODE");
        startActivityForResult(intent, 0);
    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {  
          switch (requestCode) {
          case IntentIntegrator.REQUEST_CODE:
             if (resultCode == Activity.RESULT_OK) {

                IntentResult intentResult = 
                   IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);

                if (intentResult != null) {

                   String contents = intentResult.getContents();
                   String format = intentResult.getFormatName();

                   TextView uno = (TextView) findViewById(R.id.textView1);
                   uno.setText(contents);
                   Toast.makeText(this, "Numero: " + contents, Toast.LENGTH_LONG).show();
                   Log.d("SEARCH_EAN", "OK, EAN: " + contents + ", FORMAT: " + format);
                } else {
                   Log.e("SEARCH_EAN", "IntentResult je NULL!");
                }
             } else if (resultCode == Activity.RESULT_CANCELED) {
                Log.e("SEARCH_EAN", "CANCEL");
             }
         }
    }   
}

当然,我在项目中添加了 IntentResult 和 IntentIntegrator。

因此,当按下按钮时扫描仪被正确调用并且它似乎完美地扫描了代码(它在扫描后显示“找到文本”),但似乎没有调用 onActivityResult,因为 TextView 不是 beeing更新,吐司没有出现。

知道错误可能是什么吗?

提前致谢!

4

3 回答 3

3

您的第一个错误是没有使用IntentIntegrator.initiateScan(),将其替换为您自己手动调用startActivityForResult().

您的第二个错误是假设IntentIntegrator.REQUEST_CODE0. 它不是。

因此,使用您当前的代码,您将发送一个请求代码为 的请求0,该请求代码返回onActivityResult()的是您忽略的请求代码0,因为您只是在寻找IntentIntegrator.REQUEST_CODE

只需将test()方法的主体替换为对 的调用initiateScan(),您的状态就会更好。这是一个示例项目,演示了IntentIntegrator.

于 2012-11-25T12:41:58.097 回答
1

我解决了你同样的问题。

public class MainActivity extends Activity {

    private TextView tvStatus, tvResult;

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

        this.tvStatus = (TextView) findViewById(R.id.tvStatus);
        this.tvResult = (TextView) findViewById(R.id.tvResult);

        Button scanBtn = (Button) findViewById(R.id.btnScan);

        scanBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                try {

                    Intent intent = new Intent(
                            "com.google.zxing.client.android.SCAN");
                    intent.putExtra("SCAN_FORMATS", "QR_CODE_MODE");
                    startActivityForResult(intent,
                            IntentIntegrator.REQUEST_CODE);
                } catch (Exception e) {

                    Log.e("BARCODE_ERROR", e.getMessage());
                }
            }
        });
    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {

        IntentResult scanResult = IntentIntegrator.parseActivityResult(
                requestCode, resultCode, intent);

        if (scanResult != null) {

            this.tvStatus.setText(scanResult.getContents());
            this.tvResult.setText(scanResult.getFormatName());
        }
    }
}
于 2014-01-07T11:06:49.600 回答
0

必须重写 onActivityResault 函数。只需在函数声明之前添加一个@Override 即可解决。

于 2019-11-26T12:21:13.490 回答