使用 ZXing 创建一个 Android 条形码扫描应用程序

我一直在寻找如何将条形码扫描器添加到我的应用程序。有没有什么例子,或者我怎样才能轻松地做到这一点?

236407 次浏览

ZXing 项目提供了一个独立的条形码阅读器应用程序,通过 Android 的意图机制可以被其他希望集成条形码扫描的应用程序调用。

最简单的方法是从应用程序 像这样调用 ZXing SCAN Intent:

public Button.OnClickListener mScan = new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
}
};


public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
// Handle successful scan
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}

按下连接到 mScan的按钮将直接进入 ZXing 条形码扫描仪屏幕(如果没有安装 ZXing 则会崩溃)。一旦条形码被识别出来,你会在你的 Activity中得到结果,在 contents变量中。

为了避免崩溃和简化你的事情,ZXing 有 提供了一个实用程序类,你可以把它集成到你的应用程序中,通过将用户重定向到 Android 市场(如果他们还没有安装的话) ,使得 ZXing 的安装更加顺畅。

最后,如果您希望直接将条形码扫描集成到您的应用程序中,而不需要安装单独的 ZXing 应用程序,那么这就是一个开源项目,您可以这样做!:)


编辑: 有人把这个指南编辑成了这个答案(这听起来有点奇怪,我不能保证它的准确性,我也不知道他们为什么在2015年使用 Eclipse) :

在 Eclipse 中一步一步地设置 zxing 3.2.1

  1. 从“ https://github.com/zxing/zxing”下载 zxing-master. zip
  2. 解压缩 zxing-master. zip,使用 eclipse 在 zxing-master 中导入“ android”项目
  3. 从“ http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/”下载 core-3.2.1.jar
  4. 在“ android”项目中创建“ libs”文件夹,并将 cor-3.2.1.jar 粘贴到 libs 文件夹中
  5. 点击 project: 选择“ properties”-> “ Java Compiler”将级别更改为1.7。然后点击“ Android”,将“ Project build target”更改为 Android 4.4.2 + ,因为使用1.7需要使用 Android 4.4进行编译
  6. 如果“ zxing-master/android/app/src/main/java/com/google/zxing/client/android/Camera/”中不存在“ CameraConfigurationUtils.java”,你可以从“ zxing-master/android-core/src/main/java/com/google/zxing/client/android/Camera/”中复制它并粘贴到你的项目中。
  7. 清洁和建设项目。如果您的项目显示关于“ switch-case”的错误,您应该将它们更改为“ If-else”。
  8. 完成了。清洁和建设项目。你可以点击“属性”> “ Android”> 点击“是图书馆”来使用你的项目。

使用提供的 InintIntegrator 更好。它允许您提示您的用户安装条形码扫描仪,如果他们没有它。它还允许您自定义消息。REQUEST _ CODE 常量保存 onActivityResult 的请求代码的值,以便在上面的 if 块中进行检查。

IntentIntegrator intentIntegrator = new IntentIntegrator(this); // where this is activity
intentIntegrator.initiateScan(IntentIntegrator.ALL_CODE_TYPES); // or QR_CODE_TYPES if you need to scan QR only

意图集成器.java

我在实现代码时遇到了一个问题,直到我找到了一个网站(我现在找不到它了) ,它解释说您需要在 int.putUltra 的名称中包含软件包名称。

它会调出应用程序,但它不能识别任何条形码,当我把它从。

intent.putExtra("SCAN_MODE", "QR_CODE_MODE");

intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE");

它工作得很好,这只是对其他 Android 新手程序员的一个提示。

如果您希望在代码中包含意图集成器,而不使用 ZXing 库推荐的意图集成器,那么您可以使用以下一些端口:

我使用的第一个,它完美的工作! 它有一个样本项目来尝试它。

您可以使用这个快速启动指南 http://shyyko.wordpress.com/2013/07/30/zxing-with-android-quick-start/和简单的示例项目来构建没有 InentIntegrator 的 android 应用程序。

以这种方式使用 Zxing 需要用户同时安装条形码扫描应用程序,这并不理想。您可能希望将 Zxing 直接绑定到您的应用程序中。

我强烈推荐使用这个库: https://github.com/dm77/barcodescanner

它采取了所有疯狂的构建问题,您将遇到尝试集成 Xzing 或 Zbar 直接。它在幕后使用这些库,但是用一个非常简单的 API 来包装它们。

条形码检测现在可在 Google Play 服务.代码实验室的设置过程中,这里是 API 医生,和一个 样本项目