繁体   English   中英

没有收到来自Zxing条码扫描器的Intent

[英]Not receiving an Intent back from Zxing barcode scanner

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

我创建了一个新的应用程序,它具有1个活动,该活动具有1个按钮(“扫描”按钮)和2个textviews(它们仅用于输出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甚至没有被按下。

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

我是否正确使用图书馆?

谢谢你的时间,

雨披

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

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

您在哪里调用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;
  }

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

您需要从存储库中获取最新的类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();

其次,将其添加到您的活动中以处理结果:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM