0

我正在开发一个应用程序,其中一部分涉及 QR 扫描。经过大量研究,我成功开发了一个独立的扫描应用程序。当用户打开扫描仪并扫描特定的二维码时,他会得到一些值,例如 URL。现在我想将扫描获取的数据存储到我的 android 代码中。任何人都可以帮助我如何去做吗?

据我所知,我需要使用 Zxing 的捕获活动类。但是,我不确定到底需要做什么。我在网上阅读的所有博客都指示我使用一个Intent调用条形码扫描。但是,我的应用程序的目的不仅仅是扫描产品。我需要存储扫描产品的信息,然后将其用于其他目的。

请帮助我。

谢谢, 艾米

这是 Zxing 的代码。这是处理所有扫描的主要活动。根据我通过在线阅读学到的知识,我需要捕获扫描条形码时返回的数据..

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (resultCode == RESULT_OK) { 
        if (requestCode == HISTORY_REQUEST_CODE) { 

            int itemNumber = intent.getIntExtra(Intents.History.ITEM_NUMBER, -1); 

            if (itemNumber >= 0) { 
                HistoryItem historyItem = historyManager.buildHistoryItem(itemNumber);             
                decodeOrStoreSavedBitmap(null, historyItem.getResult()); 
            } 
        }
    } 
} 


if (Intents.Scan.ACTION.equals(action)) { // Scan the formats the intent requested, and   return the result to the calling activity 
    source = IntentSource.NATIVE_APP_INTENT; 

    decodeFormats = DecodeFormatManager.parseDecodeFormats(intent); 
    if (intent.hasExtra(Intents.Scan.WIDTH) && intent.hasExtra(Intents.Scan.HEIGHT)) {

        int width = intent.getIntExtra(Intents.Scan.WIDTH, 0); 
        int height = intent.getIntExtra(Intents.Scan.HEIGHT, 0); 

        if (width > 0 && height > 0) { 
            cameraManager.setManualFramingRect(width, height); 
        } 
    }
}
4

4 回答 4

2

通过意图使用它是最简单的方法,并且可以存储扫描结果,您只需要自己做。它的工作原理都在 Zxing 的文档中,网址为http://code.google.com/p/zxing/wiki/ScanningViaIntent

从上面的链接

首先添加代码来调用 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
            //here is where you would get the data from the scanResult
            //and store locally by writing to a file or however you 
            //intend to store it
        }
        // else continue with any other code you need in the method
}

Zxing这个版本我没用过,我用的至少是2年前的但是流程是一样的

1 - 通过 Intent 启动 Zxing 2 - 扫描 QR 码 3 - 在 onActivityResult 中从扫描中检索信息。

于 2012-09-26T22:37:36.480 回答
2

嗨,我终于找到了这个问题的答案。这并没有我想的那么难(因为 Zxings 的代码是由 Zxing 团队编写的,而不是由我编写的......无论如何......)

因此,如果您想将 qr 扫描仪(由 Zxing 提供)捕获的数据存储在您的 android 代码中(无论出于何种目的......在我的情况下,我想将此数据发送到 Web 服务器......无论如何......)那么你只需要修改以下功能..这是您获得扫描活动结果的地方..

public void handleDecode(Result rawResult, Bitmap barcode) {
inactivityTimer.onActivity();
lastResult = rawResult;
Log.d("last result", "checking if raw result is what i expect");
System.out.println(lastResult);
ResultHandler resultHandler = ResultHandlerFactory.makeResultHandler(this, rawResult);
historyManager.addHistoryItem(rawResult, resultHandler);
}

我添加了日志和打印语句来检查我是否得到正确的结果。是的,它确实给了我一个正确的答案。你可以在 CaptureActivity 类中找到它。

@triggs:感谢您的帮助!你确实让我走上了正轨:-)

于 2012-09-27T23:37:58.713 回答
2

我偶然发现您的线程也在寻找有关这组代码的帮助。在我的情况下,我必须将信息发送回主应用程序(ZXing 是我项目中的一个库 - 我知道,我已经与我的客户讨论过这个问题,但由于业务需求我们无法使用 Intents)。

如果您需要将信息从另一个项目传回另一个活动,这是我的解决方案。

项目 A 是主要应用程序,而 ZXing 项目将被称为主应用程序。

编辑 ZXing 的 CaptureActivity.java 中的 handleDecode():

public void handleDecode(Result rawResult, Bitmap barcode) {
    inactivityTimer.onActivity();
    lastResult = rawResult;
    ResultHandler resultHandler = ResultHandlerFactory.makeResultHandler(this, rawResult); 
if (source == IntentSource.NATIVE_APP_INTENT) {
        Intent resultIntent = new Intent();
        resultIntent.putExtra("result", rawResult.toString());
        setResult(Activity.RESULT_OK, resultIntent);
        finish();
    } 

}//end handleDecode()

在调用 CaptureActivity 的项目 A 的活动中,

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    NullQRCodeDialogFragment dialog = new NullQRCodeDialogFragment();
    String result = "";
        if (resultCode == RESULT_OK) {
            result = intent.getStringExtra("result");
             if (result.equals(null)){
                  //TODO
             } else {
                  //TODO
             }
}//end onActivityResult

希望这可以帮助!这是我在这里的第一篇文章,我很高兴能做出贡献 =)

于 2013-02-19T12:10:42.910 回答
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:18:01.790 回答