在Android应用程序中嵌入ZXing

时间:2011-05-11 19:39:35

标签: android embed barcode-scanner zxing

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

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

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

我只想在我的应用程序中有一个按钮,当按下时,打开条形码扫描仪,扫描仪应该只能扫描条形码,解码并返回数字,它不需要发送在任何地方编码以获取任何信息等,我自己照顾这些事情。我只需要一个简单的扫描仪,它可以在按钮点击时启动,扫描代码并给我结果。但我无法想象自己该怎么做。 我认为如果你只需要从ZXing扫描仪复制一些文本就不难做到,你只需要了解它的代码。

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

2 个答案:

答案 0 :(得分:22)

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

  • 编译ZXing项目 并在您的机器上运行。那里 是一个很好的教程,如何执行此操作here
  • 根据您的需要调整此代码。我把很多项目剥离到了基本扫描仪。然后,我围绕它构建了我的项目的其余部分。这是如何做到的。

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

Structure of Adapted ZXing project

  • 您会发现需要修改4个文件才能使修改后的活动类生效。这些文件是CameraCaptureActivity类,CaptureActivityHandler类以及Decode Thread和Decode处理程序类。我托管了这些文件here

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

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

  • 确保您已根据活动名称的任何更改更新了清单。确保您有一种导航到活动的方法 - 也许使其成为意图过滤区域中的默认类。

  • 我还为您的活动添加了一个布局文件 - 它非常简单,但是您需要让扫描仪启动并运行。它被称为camera_capture.xml

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

祝你好运!!

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

答案 1 :(得分:7)

我将条码扫描器分叉并将其转换为库项目,如果您只是通过IntentIntegrator扫描条形码,则删除了大多数不需要的功能。

包含说明的项目位于https://github.com/embarkmobile/zxing-android-minimal

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