我目前正在我的应用中使用Zxing库。例如,在扫描书籍的条形码后,如何从扫描结果中获取图像,描述等内容。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
switch(requestCode) {
case IntentIntegrator.REQUEST_CODE:
if (resultCode == RESULT_OK) {
IntentResult scanResult =
IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
} else if (resultCode == RESULT_CANCELED) {
showDialog("failed", "You messed up");
}
}
}
感谢您的帮助
答案 0 :(得分:4)
Zxing扫描各种条码/二维码,所以你需要做的第一件事是弄清楚它是产品UPC还是二维码:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data != null) {
String response = data.getAction();
if(Pattern.matches("[0-9]{1,13}", response)) {
// response is a UPC code, fetch product meta data
// using Google Products API, Best Buy Remix, etc.
} else {
// QR code - phone #, url, location, email, etc.
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(response));
startActivity(intent);
}
}
}
有许多可用的Web服务将在给定UPC代码的情况下返回产品元数据。一个相当全面的是Google的Search API for Shopping。例如,您可以使用UPC = 037988482481获取产品的json表示,其URL如下所示:
您需要将“your_key_here”替换为Google API密钥。
百思买还为他们携带的所有产品提供RESTful products API,可通过UPC代码进行搜索。
一旦拥有UPC,您将需要使用AsyncTask来获取产品元数据。
答案 1 :(得分:2)
你不需要' IntentResult'或者' IntentIntegrator'为此。
你可以这样做:
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "PRODUCT_MODE");
startActivityForResult(intent, 0);
然后在onActivityResult
:
if (requestCode == 0) {
if ((resultCode == RESULT_CANCELED) || (resultCode == -1000)) {
Toast.makeText(WebViewActivity.this, "Nothing captured",
Toast.LENGTH_SHORT).show();
} else {
String capturedQrValue = data.getStringExtra("barcode_data");
}
}
通过此扫描条形码,现在Zxing代码中还有另一个使用Google API查找该ISBN的库。
在类Intents.java
中,您可以获得意图需要的额外内容以及类ISBNResultHandler
显示结果的信息。
希望它能帮助将来的某个人。
答案 2 :(得分:1)
您可以查看Android ZXing应用的功能。 Android客户端的源代码位于:ZXing Android client source code。对于ISBN号,处理的源代码为:Android ZXing app's ISBN Result Handler code
对于产品和图书搜索,Android代码会调用ResultHandler.java中的这两个函数:
// Uses the mobile-specific version of Product Search, which is formatted for small screens.
final void openProductSearch(String upc) {
Uri uri = Uri.parse("http://www.google." + LocaleManager.getProductSearchCountryTLD() +
"/m/products?q=" + upc + "&source=zxing");
launchIntent(new Intent(Intent.ACTION_VIEW, uri));
}
final void openBookSearch(String isbn) {
Uri uri = Uri.parse("http://books.google." + LocaleManager.getBookSearchCountryTLD() +
"/books?vid=isbn" + isbn);
launchIntent(new Intent(Intent.ACTION_VIEW, uri));
}
答案 3 :(得分:0)
在您的??
中执行以下代码
onActivityResult
您尚未拨打 IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if(result != null) {
if(result.getContents() == null) {
Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
} else {
String qrCode=result.getContents();
}
} else {
// This is important, otherwise the result will not be passed to the fragment
super.onActivityResult(requestCode, resultCode, data);
}
。
答案 4 :(得分:-1)
我只是想补充一点,如果你想能够在没有RuntimeException的情况下按下if语句并使用try catch块。这样:
try{
/// get scanned code here
} catch(RuntimeException e) {
e.getStackTrace();
{
希望如果没有它,你将面临不可避免的崩溃。