Skip to content Skip to sidebar Skip to footer

Android Qrcode Scanner Library

What do we have out there available to us (if anything) that we can call for QR data discovery and extraction on an image? While there have been plenty of posts thus far referencin

Solution 1:

While Sean Owen and others that have worked on the original Zxing library had provided an approach to work with the barcode libraries for the past several years, Google has finally put out an official release with Google Play Services for handling qr and barcodes.

The barcode detection library is described here. The inclusion of these libraries will make for a smooth integration. I'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'll update with the source and check this off as an accepted answer.

The detection library that Google has provided within the past year has been a much easier library to work with. It allows for quick integration with the camera APIs and extracts the information with simplicity. This would be the component that I would suggest going forward with recognition. A quick snippet is demonstrated below for handling a Qr-code. A handful of pseudocode is left in there as well.

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

    ... //Bitmap conversion codeFrameframe=newFrame.Builder().setBitmap(pictureTaken).build();
    SparseArray<Barcode> barcodes = mBarcodeDetector.detect(frame);
    if(barcodes != null && barcodes.size() != 0)
    {
        BarcodeqrCode= barcodes.valueAt(0);//barcodes.get(Barcode.QR_CODE);if(qrCode != null)
        {
             if(extractInformationFromQrCode(qrCode.rawValue)) {
                    mIsRequestingBarcodeDetection = false;
                    vibrateForQrCodeDiscovery();
                    ((Activity)mContext).runOnUiThread(newRunnable() {
                        @Overridepublicvoidrun()
                        {
                            hideBarcodeDetection(true);
                        }
                    });
                }
            }
        }

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

   } 
}

There are of course other calls available that can be taken advantage of. But there are really only a couple lines in there. The service for analyzing the frames with the library are not there by default on devices however. So, you should check whether or not the library is available (such as when internet is not available) before calculating as well. This is a slight nuisance of it. I had assumed it would be available as updates for devices going forward as part of the support library or Google Services going out to all devices. But it needs the communication first with an external service to use these library calls. Once it does this one time then that device is good from that moment on.

In my small example, I pop a toast up after a check and then back out of the activity and let the user check their connection. This can be done with a small amount of sample code as well.

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

Edit (Update):

A considerable amount of time has passed since working with the latest Google Play Services Vision libraries available for barcode detection. While the limitation for needing to download the library over the wifi is indeed a limitation, it is a one time process. And lets be honest...

...our devices will have a connection. The library itself is downloaded in the background so you don't even notice it happening unless there is trouble downloading it and then you would have to report an appropriate corrective measure such as enabling a connection to the internet for it.

One additional tidbit is that it is a little tricky sometimes with how you integrate the library into your application. Using it as a library project worked on some devices and then failed on others. Adding the jar to the build path worked across a broader number of devices (it could be all, but it solved a problem). So as such, I would do it using the secondary method when including it in your projects for now.

Solution 2:

Android QRCode Scanner Library

This may help you, this library doesn't require any download or use of any external application. We can directly integrate this into your app and use it for scanning a QR code.

https://github.com/dm77/barcodescanner

This wiki will help you to integrate with your app,

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

Solution 3:

You can also check MobileVisionBarcodeScanner (note I'm the author of this package). It is powered by Google's mobile vision API. Also see the overview here .

Solution 4:

I used this library in my app. It also works with xing but you don't need any third party applications. Additional it's really easy to use.

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

Maybe you searched something like this.

Solution 5:

You've already found the library you're looking for, I think. See the core/ module:

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

You're just looking at the Intent-based integration, but, in fact the core scanning is its own stand-alone library that you can embed into your own app.

I think Intent-based integration is best in most cases, simply because it is so simple, and, most people don't have the time to reimplement their own scanning UI and such on top of the core. Most devices have Barcode Scanner installed already, so it doesn't usually need a download.

Still, take your pick. That's why there are at least two ways to use it.

Post a Comment for "Android Qrcode Scanner Library"