1

我知道其他一些人遇到了这个问题,但我已经遵循了解决方案,但它仍然对我不起作用。

我创建了一个新应用程序,它有 1 个活动,其中有 1 个按钮(扫描按钮)和 2 个文本视图(它们将输出 Zxing 目前返回的格式名称和内容)。

我已按照 ScanningViaIntent 教程进行操作,但似乎没有成功onActivityResult

下面是我的代码:

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

    final IntentIntegrator integrator = new IntentIntegrator(this);
    Button btnScan = (Button) findViewById(R.id.button1);
    btnScan.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            integrator.initiateScan();
        }
    });
}

public void OnActivityResult(int requestCode, int resultCode, Intent intent)
{
    Log.i("result", "hit line");
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);

    TextView tv1 = (TextView) findViewById(R.id.textView1);
    TextView tv2 = (TextView) findViewById(R.id.textView2);

    if(scanResult != null)
    {
        System.out.println("format: " + scanResult.getFormatName());
        System.out.println("contents: " + scanResult.getContents());



        tv1.setText(scanResult.getFormatName());
        tv2.setText(scanResult.getContents());
    }
    else
    {
        tv1.setText("ERROR");
    }
}

TextView1 从不说“错误”,因此 scanResult 似乎不是 null 并且我的 Log.i() 行从未被击中,所以我认为它onActivityResult甚至没有被击中。

这可能与final为 OnClick() 方法制作 IntentIntegrator 有关吗?当我在 OnClick() 中创建 IntentIntegrator 时,我使用 getParent() 将 Activity 传递给构造函数,但这强制关闭了我的应用程序,并在 IntentItegrator 中出现 NullReferenceException。

我是否正确使用图书馆?

谢谢你的时间,

雨披

4

3 回答 3

1

您实际上并没有覆盖该方法onActivityResult(),因为您已经实现了OnActivityResult(). 结果没有调用您的方法。其他一切看起来都不错。

如果您使用注释,这就是您捕捉到的那种东西@Override——好习惯,因为它会捕捉到这一点。

于 2012-11-22T16:26:54.980 回答
0

你在哪里打电话startActivityForResult(..)?你可能想使用这样的东西:

Intent intentScan = new Intent(BS_PACKAGE + ".SCAN");
intentScan.addCategory(Intent.CATEGORY_DEFAULT);

// check which types of codes to scan for
if (desiredBarcodeFormats != null) {
  // set the desired barcode types
  StringBuilder joinedByComma = new StringBuilder();
  for (String format : desiredBarcodeFormats) {
    if (joinedByComma.length() > 0) {
      joinedByComma.append(',');
    }
    joinedByComma.append(format);
  }
  intentScan.putExtra("SCAN_FORMATS", joinedByComma.toString());
}

String targetAppPackage = findTargetAppPackage(intentScan);
if (targetAppPackage == null) {
  return showDownloadDialog();
}
intentScan.setPackage(targetAppPackage);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
attachMoreExtras(intentScan);
startActivityForResult(intentScan, REQUEST_CODE);

findTargetAppPackage

 private String findTargetAppPackage(Intent intent) {
    PackageManager pm = activity.getPackageManager();
    List<ResolveInfo> availableApps = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    if (availableApps != null) {
      for (ResolveInfo availableApp : availableApps) {
        String packageName = availableApp.activityInfo.packageName;
        if (targetApplications.contains(packageName)) {
          return packageName;
        }
      }
    }
    return null;
  }

要查看更完整的示例,请转到此处

于 2012-11-22T12:49:50.270 回答
0

您需要从存储库 https://github.com/zxing/zxing/tree/master/android-integration/src/main/java/com/google/zxing/integration/android获取最新的类

请参阅该类的 javadoc 以了解如何使用它。首先添加代码来调用 Intent:

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

其次,将此添加到您的 Activity 以处理结果:

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode,      intent);
    if (scanResult != null) {
        // handle scan result
    }
    // else continue with any other code you need in the method
}

更多信息在这里https://github.com/zxing/zxing/wiki/Scanning-Via-Intent

于 2014-06-18T23:40:27.743 回答