我一直在搜索如何在我的应用中添加条形码扫描器以解码条形码。我找到了一个非常好的应用程序,我可以整合做那个名为“Zxing”但唯一的问题是,它有编码和解码但我真正想要的只是解码,以便我可以限制我使用的Zxing开源文件。
我搜索过很多地方找不到只用zxing解码?
所以我的问题是我怎么能只使用Zxing进行解码而不进行编码呢? 我们非常感谢示例代码和分步说明。
感谢高级!
答案 0 :(得分:10)
最简单的方法是scan via Intent。
这是一些示例代码:
//This intent will ask the Barcode Scanner app to scan a code and give us the result
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
/* you can optionally add an extra to the intent that tells it what type of code its looking for. Like this:
*
* intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
*
* If you don't put that in it will scan all types.
*/
startActivityForResult(intent, 0);
然后在您的onActivityResult()中,您可以获得如下扫描数据:
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
// contents contains whatever was encoded
String contents = intent.getStringExtra("SCAN_RESULT");
// Format contains the type of code i.e. UPC, EAN, QRCode etc...
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
}
}
}
编辑:
Intent模型内置于android的核心思想中。它被放在那里是有充分理由的。通过只有一个应用程序处理条形码扫描并将结果返回给任何其他想要使用它的应用程序,我们可以减少浪费的空间。
例如,如果用户有5个应用程序都扫描不同的条形码并使用它们执行各种操作,如果所有5个应用程序在自己的应用程序中包含自己的条形码解码,则用户现在拥有5个条形码读取功能的副本在他们的设备上浪费空间。
Intent模型的另一个好处(特别是条形码解码)是它允许您的应用程序需要更少的权限。因为您不再需要访问相机。
它还使开发人员的一切变得更加简单。正如您在上面所看到的,通过意图与zxing集成所需的工作量是最小的。您会发现可以重复使用Zxing项目的某些部分并将它们包含在您的应用程序中。但是起床和跑步要困难得多。
ZXing project is open sourced所以当然欢迎您开始选择来源,找出您需要手动复制到项目中的哪些课程。我建议如果您打算在第一次尝试时使用此路线,则不要尝试删除编码功能。完成整个工作,然后开始删除东西。很可能如果你试图仅占用项目的某些子集,有些东西将无法正常运行,即使它们看起来不应该受到你遗漏的影响。
最后一点建议,我完全理解你为什么要在自己的应用程序中包含此功能(我自己一直在那里)。但是,不要轻易做出这个决定,并花一些时间来考虑这样的事情:假设你确实在自己的应用程序中包含了这个功能。一切顺利。但经过一段时间后,您开始看到某些设备上出现奇怪的错误,导致他们无法使用您应用的扫描功能。现在你将处于一种情况,你将不得不尝试调试和修复你没有创建的东西,并且可能无法完全理解所有正在发生的事情。而与Intent的集成使得这种调试和修复工作由实际了解其工作方式和需要解决的问题的人员完成,并且他们根据自己的更新计划进行工作。所以这个修复程序会比你可能把它们拿出来的速度快得多。