首页 文章

Android QRCode扫描仪库[关闭]

提问于
浏览
22

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

虽然到目前为止有很多帖子引用了ZXing库进行QRCode扫描,而其他几个帖子要求QRCode扫描备选方案没有我看到的有用反馈,我想我可能会再次询问社区 . 如果也许除了通过功能调用启动活动之外还有使用库的方法,我还没有看到以这种方式说出它的例子或个人 .

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

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

6 回答

  • 1

    你也可以查看MobileVisionBarcodeScanner . 它由谷歌的移动视觉API提供支持 . 另请参阅概述here .

  • 9

    虽然Sean Owen和其他曾在Zxing图书馆工作过的人已经提供了一种在过去几年中使用条形码库的方法,但Google终于推出了一个正式版本的Google Play服务来处理qr和条形码 .

    这里描述barcode detection library . 包含这些库将实现顺利集成 . 我'll repost with some sample code for achieving these results from a captured image. At the moment, I wanted to update my answer for this official release. If this indeed does provide a nice way to get at this information (without jumping through hoops and complications), then I'将与源更新并将其作为已接受的答案进行检查 .

    谷歌过去一年提供的检测库是一个更容易使用的库 . 它允许与相机API快速集成,并简单地提取信息 . 这将是我建议继续承认的组成部分 . 下面演示了一个用于处理Qr代码的快速代码段 . 少数伪代码也留在那里 .

    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
    
       } 
    }
    

    当然还有其他可以利用的电话 . 但那里确实只有几条线 . 但是,默认情况下,设备上没有使用库分析帧的服务 . 因此,在计算之前,您应该检查库是否可用(例如在互联网不可用时) . 这有点令人讨厌 . 我原以为它可以作为支持库或Google服务的一部分向所有设备发送的设备更新 . 但它需要首先与外部服务进行通信才能使用这些库调用 . 一旦它完成这一次,那么该设备从那一刻开始就是好的 .

    在我的小例子中,我在检查后弹出一个toast up然后退出活动并让用户检查他们的连接 . 这也可以通过少量示例代码完成 .

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

    Edit (Update):

    自从使用可用于条形码检测的最新Google Play服务视觉库以来,已经过了相当长的一段时间 . 虽然需要通过wifi下载库的限制确实是一个限制,但它是一次性过程 . 老实说......

    ...我们的设备将有连接 . 图书馆本身是在后台下载的,所以你甚至不会注意到它的发生,除非下载它时遇到问题,然后你必须报告一个适当的纠正措施,例如为它启用连接到互联网 .

    另外一个问题是,有时将库集成到应用程序中会有点棘手 . 使用它作为库项目在某些设备上工作,然后在其他设备上失败 . 将jar添加到构建路径可以在更广泛的设备上运行(可能是全部,但它解决了一个问题) . 因此,我现在将其包含在您的项目中时使用辅助方法 .

  • 3

    Android QRCode扫描仪库

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

    https://github.com/dm77/barcodescanner

    这个wiki将帮助您与您的应用程序集成,

    https://github.com/dm77/barcodescanner/blob/master/README.md

  • -3

    而不是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商店链接以进行下载 .

  • 4

    我想,你正在寻找 . 请参阅 core/ 模块:

    https://github.com/zxing/zxing/tree/master/core

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

    我认为基于 Intent 的集成在大多数情况下是最好的,仅仅因为它如此简单,而且,大多数人通常都需要下载 .

    不过,请选择 . 这就是为什么至少有两种方法可以使用它 .

  • 1

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

    https://github.com/journeyapps/zxing-android-embedded

    也许你搜索过这样的东西 .

相关问题