14

我通过调用已安装的条形码阅读器的意图成功地使用 zxing 扫描代码,但是当它发出哔哔声并表示扫描良好时,我希望 zxing 活动会返回控制,以便我可以处理结果,但它坐在那里并尝试再次扫描. 我必须按下后退按钮,然后它会返回,我可以进行下一步。当我打电话给扫描仪时,我是否缺少一些明显的标志?

感激地收到任何建议。非常感谢。

这是我的代码:

public boolean onTouchEvent(final MotionEvent event) {

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

    return true;
    }

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

    super.onActivityResult(requestCode, resultCode, intent);

    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");

            // Handle successful scan

            String s = "http://www.google.com/search?q=";
            s += contents;
            Intent myIntent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(s));
            startActivity(myIntent1);
            }
        else 
            if (resultCode == RESULT_CANCELED) {
                // Handle cancel
                }
            }
        }
    }
4

5 回答 5

10

这是我自己的问题的完整答案,希望这对某人有所帮助:

到这里复制整个 IntentIntegrator 类,将它添加到你的应用程序中;也可以去这里并将 IntentResult 类复制到您的应用程序中。现在将其添加到您的活动中(或通过按钮/其他触发扫描):

public boolean onTouchEvent(final MotionEvent event) {

    IntentIntegrator integrator = new IntentIntegrator(this);
    integrator.initiateScan();

    return true;
    }

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
      IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
      if (scanResult != null) {
        // handle scan result
          String s = "http://www.google.com/search?q=";
            s += scanResult.getContents();

            Intent myIntent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(s));
            startActivity(myIntent1);
      }
      // else continue with any other code you need in the method
      //...
    }

最好只调用条形码扫描仪应用程序提供的服务,而不是将代码块复制并粘贴到您自己的应用程序中,但这似乎是推荐的方式:(

于 2012-06-13T17:26:19.897 回答
5

为什么不使用提供的IntentIntegrator类?这是项目文档中提到的唯一方法,你看过那些吗?https://github.com/zxing/zxing/wiki/Scanning-Via-Intent

我创建它是为了总结发送和解析 Intent 的这些细节,所以你不会打错字。例如,没有额外的“com.google.zxing.client.android.SCAN.SCAN_MODE”。

于 2012-06-13T16:13:44.620 回答
1

添加完成活动(请求代码);在 onActivityResult() 方法的末尾。

试试这个:用下面的代码替换你在 onTouch 中的前 2 行。似乎问题出在扫描二维码以外的代码时。请移除扫描过滤器并检查一次。

Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 意图.addFlags(意图.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

于 2012-06-13T14:08:30.437 回答
1

我遇到了同样的问题,所以我尝试使用 Sean Owen 推荐的 IntentIntegrator 类。我仍然有这个问题,直到我意识到这只是在尝试扫描纵向条形码时发生(最常见于手机上)。事实证明,从纵向到横向的方向变化会导致双重扫描。我通过添加android:configChanges="orientation|keyboardHidden|screenSize"到清单中的活动解决了这个问题。您可能只需要方向之一,但未经测试。

对于在创建 Adob​​e AIR 原生扩展时遇到此问题的任何用户,请务必将该行不仅添加到您的 android 项目清单中,而且还要添加到 app.xml 中的 android 清单添加中的活动标记中。

于 2013-10-08T15:00:57.547 回答
0

这是我正在使用的解决方案。它对我来说很好。

Intent intent = new Intent(SelectOptionActivity.this, CaptureActivity.class);
                intent.putExtra("SCAN_MODE", "ONE_D_MODE");
                intent.putExtra("SCAN_FORMATS", "CODE_39,CODE_93,CODE_128,DATA_MATRIX,ITF,CODABAR,EAN_13,EAN_8,UPC_A,QR_CODE");
                intent.setAction(Intents.Scan.ACTION);
                startActivityForResult(intent, 1);


public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == 1 && resultCode == RESULT_OK) {
            final String contents = intent.getStringExtra(Intents.Scan.RESULT);
            final String formatName = intent.getStringExtra(Intents.Scan.RESULT_FORMAT);

        }
    }
于 2016-06-20T09:16:03.930 回答