28

I've been looking all over internet how to include zxing library to my project, and I found this tutorial: http://blog.dihaw.com/integrating-zxing-in-your-android-app-as-standalone-scanner/

But when I reach the point that you need to check for BeepManager to add the R import I get all kinds of errors in my project (Even on the MainActivity) that it couldn't find R.

Also I found this one https://github.com/journeyapps/zxing-android-embedded/blob/master/README.md which seemed a lot easier because it was auto integrated by gradle, but when I sync it pops an error that it couldn't find the files.

Any help would be appreciated :) I'm new to Android Studio.

EDIT:

I added the settings of the 2nd method (the one with the gradle settings) to my build.gradle and 4 error pop up:

Error:Failed to find: com.embarkmobile:zxing-android-legacy:2.0.0 
Error:Failed to find: com.google.zxing:core:3.0.1 
Error:Failed to find: com.embarkmobile:zxing-android-integration:2.0.0 
Error:Failed to find: com.embarkmobile:zxing-android-minimal:2.0.0

Any help?

---ANSWER---

To fix this problem I needed to disable Offline Work on Gradle.

  • Android Studio's settings>Gradle>Uncheck 'offline work'
gatorback
  • 1,351
  • 4
  • 19
  • 44
Mauricio Silva
  • 483
  • 1
  • 5
  • 13
  • Specific error messages would be helpful. You can use the blockquote type markdown formatting (`>` at the beginning of lines) to set it apart and make sure your question is readable. Use the [edit link](https://stackoverflow.com/posts/27851512/edit) at the bottom of your question to make changes. – Jeff B Jan 08 '15 at 23:42
  • ZXing is not the only way to read a barcode. As of 2016, it's much easier to use the [Android Barcode API](http://stackoverflow.com/questions/6327483/implement-bar-code-scanner-in-android/38881708#38881708). – Dan Dascalescu Aug 10 '16 at 22:24
  • @DanDascalescu Your link to the Android Barcode API was removed by SE. Any other suggestions? – gatorback Dec 16 '19 at 04:05

4 Answers4

39

You need add the following to your build.gradle file:

repositories {
    mavenCentral()

    maven {
        url "http://dl.bintray.com/journeyapps/maven"
    }
}

dependencies {
    // Supports Android 4.0.3 and later (API level 15)
    compile 'com.journeyapps:zxing-android-embedded:2.0.1@aar'

    // Supports Android 2.1 and later (API level 7), but not optimal for later Android versions.
    // If you only plan on supporting Android 4.0.3 and up, you don't need to include this.
    compile 'com.journeyapps:zxing-android-legacy:2.0.1@aar'

    // Convenience library to launch the scanning and encoding Activities.
    // It automatically picks the best scanning library from the above two, depending on the
    // Android version and what is available.
    compile 'com.journeyapps:zxing-android-integration:2.0.1@aar'

    // Version 3.0.x of zxing core contains some code that is not compatible on Android 2.2 and earlier.
    // This mostly affects encoding, but you should test if you plan to support these versions.
    // Older versions e.g. 2.2 may also work if you need support for older Android versions.
    compile 'com.google.zxing:core:3.0.1'
}

My build.gradle file like this:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.myapplication2"
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

repositories {
    mavenCentral()

    maven {
        url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/"
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    // Supports Android 4.0.3 and later (API level 15)
    compile 'com.embarkmobile:zxing-android-minimal:2.0.0@aar'

    // Supports Android 2.1 and later (API level 7), but not optimal for later Android versions.
    // If you only plan on supporting Android 4.0.3 and up, you don't need to include this.
    compile 'com.embarkmobile:zxing-android-legacy:2.0.0@aar'

    // Convenience library to launch the scanning and encoding Activities.
    // It automatically picks the best scanning library from the above two, depending on the
    // Android version and what is available.
    compile 'com.embarkmobile:zxing-android-integration:2.0.0@aar'

    // Version 3.0.x of zxing core contains some code that is not compatible on Android 2.2 and earlier.
    // This mostly affects encoding, but you should test if you plan to support these versions.
    // Older versions e.g. 2.2 may also work if you need support for older Android versions.
    compile 'com.google.zxing:core:3.0.1'
}

The code is here.

Also, for how to use it, please refer my answer on the Stackoverflow here

It contains method and also simple code that I have tested.

Community
  • 1
  • 1
bjiang
  • 6,068
  • 2
  • 22
  • 35
  • I added those setting to my build.gradle and 4 error pop up: Error:Failed to find: com.embarkmobile:zxing-android-legacy:2.0.0 Error:Failed to find: com.google.zxing:core:3.0.1 Error:Failed to find: com.embarkmobile:zxing-android-integration:2.0.0 Error:Failed to find: com.embarkmobile:zxing-android-minimal:2.0.0 Any help? This is the same error that happened before – Mauricio Silva Jan 09 '15 at 16:42
  • Solved it! I'll elaborate an answer – Mauricio Silva Jan 09 '15 at 17:05
  • Try using this library. Easy integration of Xzing. https://github.com/journeyapps/zxing-android-embedded – Carlos J May 25 '15 at 15:52
  • @MauricioSilva how did you solve Error:Failed to find: com.embarkmobile:zxing-android-legacy:2.0.0 error? – prgmrDev Jul 01 '15 at 13:07
  • @prgmrDev I had OfflineWork enabled in AS settings. Read my edited section of my question, I wrote how to disable it :) – Mauricio Silva Jul 02 '15 at 20:08
  • When I add the Gradle I obtain this error: Error:Execution failed for task ':app:dexDebug'. Error Code: 2 Output: UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Lcom/google/zxing/integration/android/IntentResult; – Jesus Almaral - Hackaprende Aug 29 '15 at 23:18
16

As of version 3 of zxing-android-embedded you only need to add these to your build.gradle file:

repositories {
    jcenter()
}

dependencies {
    compile 'com.journeyapps:zxing-android-embedded:3.0.2@aar'
    compile 'com.google.zxing:core:3.2.0'
}

Follow the steps in: https://github.com/journeyapps/zxing-android-embedded/

It now also allows for portrait mode with simple changes to the IntentIntegrator, and easier ways to customize the views.

Itay Bianco
  • 697
  • 6
  • 16
  • Hi, bro. Did you use CompoundBarcodeView in ZXing embedded? – Neo Sep 23 '15 at 01:31
  • Yes. I start with the ViewFinder's visibility as INVISIBLE and change to VISIBLE when a button is clicked, which also calls decodeSingle for a single scan. This way the view shows what the camera sees, but without the red line and yellow patches of the ViewFinder, until the user actually wants to capture. But of course, that's what I needed for my app, yours might need it visible and capturing the whole time. – Itay Bianco Sep 25 '15 at 07:00
  • This should be accepted answer i am using same project for eclipse ..read my answer here http://stackoverflow.com/questions/4782543/integration-zxing-library-directly-into-my-android-application/34941618#34941618 – Hitesh Sahu Jan 22 '16 at 09:42
3

Easiest way to integrate ZXing for barcode or Qr scanning.

For Full Reference : Scan Barcode ZXing Android

Add in dependencies

compile 'me.dm7.barcodescanner:zxing:1.9' 

ScanActivity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.zxing.Result;

import me.dm7.barcodescanner.zxing.ZXingScannerView;

public class ScanActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler{

    private ZXingScannerView mScannerView;

    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        mScannerView = new ZXingScannerView(this);   // Programmatically initialize the scanner view
        setContentView(mScannerView);                // Set the scanner view as the content view
    }

    @Override
    public void onResume() {
        super.onResume();
        mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results.
        mScannerView.startCamera();          // Start camera on resume
    }

    @Override
    public void onPause() {
        super.onPause();
        mScannerView.stopCamera();           // Stop camera on pause
    }

    @Override
    public void handleResult(Result rawResult) {
        // Do something with the result here
       // Log.v("tag", rawResult.getText()); // Prints scan results
       // Log.v("tag", rawResult.getBarcodeFormat().toString()); // Prints the scan format (qrcode, pdf417 etc.)

        MainActivity.tvresult.setText(rawResult.getText());
        onBackPressed();

        // If you would like to resume scanning, call this method below:
        //mScannerView.resumeCameraPreview(this);
    }
}
user6435056
  • 717
  • 6
  • 5
1

I have it working with this:

repositories { mavenCentral()
    maven { url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/" }
}

compile 'com.google.zxing:core:3.2.1'
compile 'com.embarkmobile:zxing-android-minimal:2.0.0@aar'
compile 'com.embarkmobile:zxing-android-integration:2.0.0@aar'

I recommend using the IntentIntegrator

IntentIntegrator integrator = new IntentIntegrator(getActivity()); 
integrator.forSupportFragment(this).initiateScan();

The requestCode comes back with IntentIntegrator.REQUEST_CODE

formica
  • 934
  • 1
  • 8
  • 16