Android QRCode扫描程序库

Android QRCode扫描程序库,android,qr-code,Android,Qr Code,我们有什么(如果有的话)可以用来发现和提取图像上的QR数据 虽然到目前为止有很多文章引用ZXing库进行QRCode扫描,但我还没有发现这是一个适合我的解决方案。其他几个人一直在寻求QR码扫描的替代方案,我没有看到有用的反馈。我想我可能会再次询问社区,对于不在我们自己的应用程序之外启动活动和呼叫的二维码库,还有什么其他选择。它应该以非常简单的方式扫描来自Camera2 API的图像。它不应该是一个复杂的图书馆。我没有看到过这样的例子或个人 这实际上让我感到困惑,为什么没有将QRCode功能的本机

我们有什么(如果有的话)可以用来发现和提取图像上的QR数据

虽然到目前为止有很多文章引用ZXing库进行QRCode扫描,但我还没有发现这是一个适合我的解决方案。其他几个人一直在寻求QR码扫描的替代方案,我没有看到有用的反馈。我想我可能会再次询问社区,对于不在我们自己的应用程序之外启动活动和呼叫的二维码库,还有什么其他选择。它应该以非常简单的方式扫描来自Camera2 API的图像。它不应该是一个复杂的图书馆。我没有看到过这样的例子或个人

这实际上让我感到困惑,为什么没有将QRCode功能的本机实现添加到相机库或谷歌SDK中的类似位置,而不是操作系统中的本机实现


调用并要求另一个应用程序(甚至请求下载)并不是一个优雅的解决方案,任何用户都不应该屈从于这样做。作为开发人员,我们应该能够访问一个库,该库能够从图像或帧中提取QRCode,然后我们可以从中删除编码数据。

我认为,您已经找到了要查找的库。请参阅
core/
模块:

您只是在看基于
Intent
的集成,但事实上,核心扫描是它自己的独立库,您可以将其嵌入到自己的应用程序中

我认为在大多数情况下,基于意图的集成是最好的,因为它非常简单,而且大多数人没有时间在核心上重新实现自己的扫描UI等。大多数设备已经安装了条形码扫描仪,所以通常不需要下载


尽管如此,你自己选吧。这就是为什么至少有两种方法可以使用它。

与QRCODE ZXing库集成相比,您可以从任何地方打开相机并扫描QRCODE: 我在下面找到的代码可能有助于您扫描QRCode:

try {
                Intent intent = new Intent("com.google.zxing.client.android.SCAN");
                intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); // "PRODUCT_MODE for bar codes
                startActivityForResult(intent, 0);
            } catch (Exception e) {    
                Uri marketUri = Uri.parse("market://details?id=com.google.zxing.client.android");
                Intent marketIntent = new Intent(Intent.ACTION_VIEW,marketUri);
                startActivity(marketIntent);
            }

请记住,您必须在手机中使用“Zxing”的条形码扫描仪应用程序,否则它将首先重定向到Google play store链接进行下载。

而Sean Owen和其他在原始Zxing库上工作的人在过去几年中提供了使用条形码库的方法,谷歌终于发布了一个官方版本,提供谷歌Play服务来处理二维码和条形码

这里描述了该方法。包含这些库将有助于顺利集成。我将重新发布一些示例代码,以从捕获的图像中获得这些结果。目前,我想为这次官方发布更新我的答案。如果这确实提供了一个获取这些信息的好方法(不需要跳出障碍和复杂情况),那么我将使用源代码进行更新,并将其作为一个可接受的答案进行检查

谷歌在过去一年中提供的检测库是一个更容易使用的库。它允许与摄像头API快速集成,并简单地提取信息。这将是我建议继续承认的组成部分。下面演示了一个处理二维码的快速代码片段。还有一些伪代码留在那里

public final void analyzeFrameForQrCode(byte[] qrCodePictureF, int imageFormatF, XriteSize previewWindowSizeF)
{
    if(!qrCodeDetectionPossible() || qrCodePictureF == null || mIsAnalyzingQrCodeFrame)
    {
        return;
    }

    ... //Bitmap conversion code

    Frame frame = new Frame.Builder().setBitmap(pictureTaken).build();
    SparseArray<Barcode> barcodes = mBarcodeDetector.detect(frame);
    if(barcodes != null && barcodes.size() != 0)
    {
        Barcode qrCode = barcodes.valueAt(0);//barcodes.get(Barcode.QR_CODE);
        if(qrCode != null)
        {
             if(extractInformationFromQrCode(qrCode.rawValue)) {
                    mIsRequestingBarcodeDetection = false;
                    vibrateForQrCodeDiscovery();
                    ((Activity)mContext).runOnUiThread(new Runnable() {
                        @Override
                        public void run()
                        {
                            hideBarcodeDetection(true);
                        }
                    });
                }
            }
        }

     ... //Cleanup and code beyond Qr related material

   } 
}
if(!mBarcodeDetector.isOperational())
{
    updateUserInstructions("The barcode library cannot be downloaded");
    return false;
}
编辑(更新):

自从使用最新的可用于条形码检测的Google Play Services Vision库以来,已经过了相当长的一段时间。虽然需要通过wifi下载图书馆的限制确实是一个限制,但这是一个一次性过程。老实说

…我们的设备将具有连接。库本身是在后台下载的,因此您甚至不会注意到它的发生,除非下载时遇到问题,然后您必须报告适当的纠正措施,例如为它启用internet连接

另外一个小贴士是,有时如何将库集成到应用程序中有点棘手。将其用作库项目在某些设备上有效,但在其他设备上失败。将jar添加到构建路径可以跨更多的设备工作(可能是全部,但它解决了一个问题)。因此,我现在将它包括在您的项目中时,会使用第二种方法来完成它。

您也可以检查(注意,我是这个包的作者)。它由谷歌的移动视觉API提供支持。另请参见概述
.

我在我的应用程序中使用了这个库。它也适用于xing,但您不需要任何第三方应用程序。另外,它真的很容易使用


可能您搜索了类似的内容。

Android QRCode Scanner库

这可能会对您有所帮助,此库不需要下载或使用任何外部应用程序。我们可以直接将其集成到您的应用程序中,并使用它扫描二维码

此wiki将帮助您与应用程序集成


您可以轻松地将zxing库添加到应用程序中,并创建一个customview来处理cameraview,然后将该信息发送到zxing库,而无需打开任何其他应用程序。FWIW以下是我对为什么我在谷歌时从未将其内置到Android中的解释:在花了一些时间分析和使用它之后,通过使用QRCodeReader类并传入自己的位图,我能够得到一些结果,但我必须使用其他类(如BinaryBitmap和Binarizer类)进行手动转换。与其说它是一个库,不如说它是一个分类的类。我希望看到某种类型的类,它从QRCodeReader返回结果信息,甚至带有位图,作为在构建读取器期间传递参数的选项。可能是QRResult字段返回wi