gpt4 book ai didi

android - 通过集成到您的应用程序中的 ZXing 获取 QR 扫描结果

转载 作者:行者123 更新时间:2023-11-30 03:46:27 24 4
gpt4 key购买 nike

我用了this answer创建一个独立的 Android 库项目,其中包含 ZXing 源代码 (ZXing v2.1)。它编译得很好,如果我运行 CaptureActivity,我可以按预期读取 QR 码。

我有另一个 Android 项目,我想从中提取这个库。我已经正确设置了图书馆关系。

我遇到的问题是,如何通过 IntentIntegrator(提到 here)启动 ZXing 扫描仪的本地副本。

我尝试修改 IntentIntegrator.initiateScan() 方法以使用我的 CaptureActivity 本地副本,并正确加载 QR 扫描仪。 但是,一旦二维码被扫描,二维码信息就会显示在屏幕上,而不是将结果发送回 onActivityResult 中的调用 Activity 。

如何让它将 QR 扫描结果发送到调用 Activity 的 onActivityResult?

作为引用,这是我将 IntentIntegrator.initiateScan() 方法更改为:

  public AlertDialog initiateScan(Activity act, Collection<String> desiredBarcodeFormats) {       

//Hardcoding name of activity to call --> is this where I've gone wrong?
Intent intentScan = new Intent(act, CaptureActivity.class);

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());
}


//Commented this out because it didn't seem to find my class...

// 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);
return null;
}

我正在像这样启动扫描:

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

我觉得我在这里缺少一些简单的东西,任何朝着正确方向的插入都会很棒。

解决方案

这是最终起作用的。我仍然以相同的方式调用它:

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

但是 initiateScan 方法现在看起来像这样:

  public AlertDialog initiateScan(Activity act, Collection<String> desiredBarcodeFormats) 
{

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());
}

//THIS WAS THE KEY
setSingleTargetApplication(act.getPackageName());

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);
act.startActivityForResult(intentScan, REQUEST_CODE);
return null;
}

重要的是确保 BS_PACKAGE 指向 CaptureActivity 包,调用“act.startActivityForResult...”而不仅仅是“startActivityForResult...”,并使用应用程序的包名称调用 setSingleTargetApplication调用扫描仪。

最佳答案

尝试更改行 startActivityForResult(intentScan, REQUEST_CODE);

act.startActivityForResult(intentScan, REQUEST_CODE);

您无需注释包含findTargetAppPackage 的代码,只需通过调用setSingleTargetApplication() 设置目标应用程序的包(如果您是唯一使用此库的应用程序)

关于android - 通过集成到您的应用程序中的 ZXing 获取 QR 扫描结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com