我正在开发一个应用程序,其中一部分涉及QR扫描。经过大量的研究,我成功地开发了一个独立的扫描应用程序。当用户打开扫描仪并扫描特定的QR码时,他获得了一些价值,例如一个URL。现在我想将扫描时获得的数据存储到我的android代码中。任何人都可以帮我解决这个问题吗?
从我所看到的,我需要使用Zxing的捕获活动类。但是,我不确定究竟需要做什么。我在网上阅读的所有博客都指示我使用Intent
来调用条形码扫描。但是,我的应用程序的目的不仅仅是扫描产品。我需要存储扫描产品的信息,然后将其用于其他目的。
请帮帮我。
谢谢, Amey
以下是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);
}
}
}
答案 0 :(得分: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中的扫描中检索信息。
答案 1 :(得分: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);
}
我添加了Log和print语句来检查我是否得到了正确的结果。是的,它确实给了我一个正确的答案.. 你可以在CaptureActivity类中找到它。
@triggs:谢谢你的帮助!你确实让我走上正轨: - )
答案 2 :(得分: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()
在Project A的活动中,调用CaptureActivity,
@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
希望这有帮助!这是我在这里的第一篇文章,我很高兴我可以贡献=)
答案 3 :(得分: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);
}
}