22

所以我是另一个不幸的 android 开发初学者,需要在他的应用程序中嵌入 ZXing 条码扫描器。

在 stackoverflow 上有很多问题询问如何在此处执行此操作,但没有一个问题的答案对于初学者来说是真正可以理解和解释的。所有的答案都说“你所要做的就是构建 ZXing 项目的核心库,在你的项目中引用它,然后将 ZXing 的 android/目录中的一些代码复制到你的应用程序中,你就完成了”。但这对菜鸟来说不是很有帮助。

我的项目中引用了 ZXings 核心库。我打开了 Barcode Scanner 应用程序源。我正在尝试阅读和理解 Barcode Scanner 应用程序的代码,但它对于我的知识水平来说太复杂了。

我只想在我的应用程序中有一个按钮,按下该按钮时会打开条形码扫描仪,扫描仪应该只能扫描条形码,对其进行解码并将数字返回给我,它不需要将代码发送到任何地方获取任何信息等,我自己会处理这些事情。我只需要一个简单的扫描仪,它会在单击按钮时启动,扫描代码并给我结果。但我不知道自己该怎么做。如果您只需要从 ZXing 扫描仪复制一些文本,我认为这应该不难做到,您只需要了解它的代码。

因此,如果有人可以解释这一点(告诉要复制哪些代码部分,如何在按钮 onClick 方法中启动扫描仪等)请这样做,我相信有很多人会像我一样对此表示感谢是。

4

2 回答 2

22

我必须完全按照您的要求去做。这并不容易,但也不算太糟糕。这也是我的第一个(商业或其他)Android 应用程序。我所做的是:

  • 在您的机器上编译并运行 ZXing 项目。有一个很好的教程关于如何做到这一点here
  • 调整此代码以满足您的需求。我将很多项目剥离为基本的扫描仪。然后我围绕它构建了我的项目的其余部分。这是如何做到这一点的。

  • 使核心中的 CaptureActivity 尽可能简单。您所需要的只是从核心扫描仪代码返回的数字。这是我的项目结构的图片:

适配ZXing项目结构

  • 您会发现,您需要修改 4 个文件才能使修改后的 Activity 类正常工作。这些文件是 CameraCaptureActivity 类、CaptureActivityHandler 类以及解码线程和解码处理程序类。我在这里托管了这些文件。

  • 将这四个文件放入您的 ZXing 工作项目的副本中。删除原来的 CaptureActivity 以及您已替换的其他原始线程和处理程序类。(忽略 CaptureActivityHandlerDemo 文件,因为它被错误地放在那里)

  • 更改包名称以匹配工作的 ZXing 包名称。确保您的活动在所有这四个类中的名称相同。传入实现“getHolder”而不是 Activity 类本身的接口可能是一个好主意。

  • 确保您已使用对活动名称的任何更改更新了清单。确保您有一种导航到活动的方法——也许将其设置为意图过滤器区域中的默认类。

  • 我还为您的活动包含了一个布局文件 - 它非常简单,但是您只需启动扫描仪并使其正常工作。它被称为 camera_capture.xml

希望这就是您启动和运行所需的全部内容。这不是一个简单的过程,不幸的是我不能给你我的整个项目,因为它是一个商业产品。

祝你好运!!

PS请将任何问题作为对此答案的评论发表,我会尽力提供帮助。

于 2011-05-12T02:56:06.053 回答
7

我对 Barcode Scanner 进行了 fork 并将其转换为一个库项目,并删除了您仅通过 IntentIntegrator 扫描条形码时不需要的大部分功能。

带有说明的项目可在https://github.com/embarkmobile/zxing-android-minimal获得。

如果您已经在使用 Maven,将它包含在您的项目中真的很容易。如果没有 - 您可以使用 CaspNZ 描述的方法将代码复制到您的项目中。

于 2012-12-14T15:50:30.997 回答