【问题标题】:Get ZXing to work让 ZXing 工作
【发布时间】:2011-05-17 10:43:05
【问题描述】:

我遵循了所有说明、wiki、入门、指南、帮助、 等我可以找到有关 ZXing 项目的信息。 经过多次调试,我终于设法使用ant进行编译 core.jar、javame.jar 和 javese.jar。 我想将 ZXing 集成到我的代码中,即我希望扫描 \读取条形码并处理其数据。

我已将上述每个文件作为外部 jar 导入。然后 我转向https://code.google.com/p/zxing/wiki/DeveloperNotes 使用 MultiFormatReader()。 无法解析 BufferedImage 类。我尝试了我所知道的一切 我什至尝试了 android 的 Bitmap 来解决这个问题,但它没有帮助 我也是。

我知道我可以使用意图来读取\扫描条形码,但我希望 自己处理而不是安装“第三方”应用程序。

谁能帮我理解我该怎么做? 几行代码将不胜感激。

再说一次,我只想扫描\读取条形码并分析其数据。

【问题讨论】:

    标签: java android barcode barcode-scanner zxing


    【解决方案1】:

    最简短的回答是,您不应该在 Android 应用中使用 javase.jar。它是用于 JavaSE 的代码。并非所有 JavaSE 类都在 Android 中。特别是 Android 没有像 BufferedImage 这样的 AWT 类。

    您只想在项目中包含core.jar。然后使用它编写您的 Android 应用程序。

    【讨论】:

    • 肖恩感谢您的回复,并分享您的实施。但这似乎不起作用,而且您还没有告诉我新的东西。我熟悉 BufferedImage 不是 JavaSE 的一部分这一事实,我想你会帮助我解决这个问题。如果你想分享你的实现,为什么你没有提供适当的文档呢?无论如何,任何帮助将不胜感激。 (我从来没有尝试过这么多的猜测)
    • 我不明白你的评论。 BufferedImage JavaSE 的一部分。它不是 Android 的一部分。因此,您不能在 Android 项目中包含像 javase.jar 这样使用 BufferedImage 的代码也就不足为奇了。那是您报告的错误,我提供了解决方案:除了core.jar,不要包含任何内容。 (javame.jar 是 JavaME 代码,在 Android 中不会工作或有用。)我是 ZXing 的作者,所以我在项目中与您分享了我的全部实现,所以我进一步不明白。
    • 我无意刻薄,请接受我的道歉。无论如何,我应该怎么做才能使用 BufferedImage?你能把你敏锐的知识变成几行代码吗?谢谢。
    • 我真的迷路了。不,你看到android/了吗?这是一个工作 Android 项目的完整源代码。它是 Apache 许可的,您可以随心所欲地重复使用。我不知道你还想要什么。
    • 你永远不想包含javase.jar。它根本不适合安卓。如果您通过 Intent 进行集成,您也不需要 core.jar。任何其他说法都是错误的;相信我,我是作者!
    【解决方案2】:

    Jackson 我也建议您采用 inazaruk 建议的方式。但如果您仍然在集成该部分代码时遇到问题 (zxing-android)。

    • 只需下载zxing-core
    • 将此核心项目导入到您的 Eclipse 中
    • 在您的应用程序的 Eclipse 构建路径中添加 zxing-core 项目的引用,使其不是由 JVM 编译,而是由 Dalvik(避免使用 jar 文件,因为它是使用 JVM 编译的)并简单地使用https://code.google.com/p/zxing/wiki/DeveloperNotes 建议的所有课程

    编辑: 正如 Sean Owen 所说,android 不具备 BufferedImage 类。您需要导入这些类并满足它们的依赖关系。

    • com.google.zxing.BinaryBitmap,
    • com.google.zxing.LuminanceSource,
    • com.google.zxing.MultiFormatReader,
    • com.google.zxing.Reader
    • com.google.zxing.Result
    • com.google.zxing.common.HybridBinarizer

    那么你可以这样使用它

     Bitmap bMap = BitmapFactory.decodeStream(new FileInputStream(file));
     LuminanceSource source = new RGBLuminanceSource(bMap);
     BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(
                                  source));
     Reader reader = new MultiFormatReader();
    
     Result result = reader.decode(bitmap);
    

    【讨论】:

    • 我能够导入 zxing-core。虽然不知道怎么做第三步。无论如何,我遵循了 DeveloperNotes,但 BufferedImage 无法解析。
    • @Mr Jackson 如果你现在对 jar 没有任何问题,那么你不需要将项目添加到你的构建路径中。参见上面的 edited 部分
    • 谢谢!现在我只需要捕获一个图像,然后使用 FileInputStream 打开它。对吗?
    • @Mr Jackson Yea 。虽然也有其他方法,例如直接解码 InputStream 以读取条形码等。选择对您有效的方法。
    【解决方案3】:

    这是我为实验性应用所做的:

    • 下载安卓版ZXing条码扫描器(here)
    • 将此项目转换为Android Library
    • 删除了我不需要的所有功能
    • 以我想要的方式修改了CaptureActivity,使其与我的应用更好地集成。

    我发现这种方式更简单,因为 Android 在不同设备上统一支持相机存在一些问题,ZXing 的人已经解决了这个问题。

    【讨论】:

    • 感谢您的快速回答。我已经下载了整个项目。我可以从中提取库(/android/),但是我应该如何处理这些文件?将它们复制到我的项目中?
    • 刚才我明白你了。我从源代码创建了一个新的 android 项目,并将其从 zxing 重定向到 /andoroid/ 目录。但我得到了太多错误。这是截图i52.tinypic.com/16gcwav.png
    • 我无法通过那个截图猜出你的问题是什么:) 请发布编译错误日志。
    • 我认为这些错误是由于 XML 文件中的不可接受的字符造成的。清理 XML 后,将生成 R 文件,并且包中的所有错误都会消失。
    【解决方案4】:

    大家好,其实我也遇到了这个问题。但最后我成功地运行了这个项目。当我们下载 zxing 项目并简单地导入它时,由于缺少许多文件,因此出现错误的数字。

    实际上这些文件分布在整个项目中。因此,如果您在 Zxing-master 中搜索这些文件,您可以轻松找到。复制这些文件并简单地复制到您的项目中,因为在我的工作区中它是“CaptureActivity”。也可能是由于 Java Compiler 导致的编译错误导致的一个问题(该项目至少需要 Java 1.7 和 Android OS 4.4)。

    我在运行这个项目时所知道的一切我都解释了。有任何疑问请留言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      相关资源
      最近更新 更多