web-dev-qa-db-fra.com

Intégrez le lecteur de code QR ZXing sans installer le scanner BarCode

J'essaie d'intégrer le code QR ZXing dans mon application Android sans installer l'application BarCode Scanner. J'ai suivi les étapes suivantes:

1) Premièrement, j'ai téléchargé le fichier ZXing.Zip et l'extrais

2) ouvrez le projet ZXing en tant que projet existant Android, puis accédez au dossier Android, ouvrez le dossier Android et incluez également le fichier core.jar dans le projet ZXing nommé CaptureActivity.

3) J'ai utilisé le projet CaptureActivity comme bibliothèque dans mon projet nommé 'QRCodeSample' . (Problème d'intégration de CaptureActivity dans une bibliothèque).

4) Mon code est comme ci-dessous3:

   public class QRCodeSampleActivity extends Activity {
Button b1;
static String contents;

public static final int REQUEST_CODE = 1;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            /*Intent intent = new Intent("com.google.zxing.client.Android.SCAN");
            intent.putExtra("com.google.zxing.client.Android.SCAN.SCAN_MODE",
                    "QR_CODE_MODE");
            startActivityForResult(intent, 0);*/
            Intent intent = new Intent("com.google.zxing.client.Android.SCAN");
            intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
            startActivityForResult(intent, 0);


        }
    });
}

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            Log.i("Barcode Result", contents);
            Intent i1 = new Intent(QRCodeSampleActivity.this, webclass.class);
            startActivity(i1);
            // Handle successful scan
        } else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
            Log.i("Barcode Result","Result canceled");
        }
    }
}

 }

Le fichier manifeste est:

<uses-permission Android:name="Android.permission.CAMERA"/>

<application
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name" >

     <activity Android:name="com.google.zxing.client.Android.CaptureActivity"
           Android:screenOrientation="landscape"
           Android:configChanges="orientation|keyboardHidden"
           Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen"
           Android:windowSoftInputMode="stateAlwaysHidden">
           <intent-filter>
              <action Android:name="Android.intent.action.MAIN"/>
              <category Android:name="Android.intent.category.DEFAULT"/>
           </intent-filter>
           <intent-filter>
              <action Android:name="com.google.zxing.client.Android.SCAN"/>
              <category Android:name="Android.intent.category.DEFAULT"/>
            </intent-filter>


    </activity>
    <activity
        Android:label="@string/app_name"
        Android:name=".QRCodeSampleActivity" >
       <intent-filter >
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>


    <activity  Android:name=".webclass"></activity>

</application>

</manifest>

et sa bibliothèque ne pas ajouter aussi

LibraryInformation

Lorsque j'essaie d'exécuter mon projet, le message d'erreur est le suivant:

Impossible d'instancier l'activité ComponentInfo {com.qr.code/com.qr.code}: Java.lang.ClassNotFoundException: com.qr.code in loader dalvik.system.PathClassLoader [/data/app/com.qr.code-1 .apk]

25
Kanika

Finalement j'ai eu la réponse,

À partir de ADT 14, les champs de ressources (tels que R.id.decode) ne sont plus constants lorsqu'ils sont définis dans des projets de bibliothèque

Donc, dans la bibliothèque ZXing-> Android-> com.google.zxing.client.Android.CaptureActivityHandler.Java et DecodeHandler.Java

Remplacez ces deux classes par if-else, puis importez cette bibliothèque ZXing dans votre projet.

Le reste de la codification de mon propre projet est la même ... juste le problème avec les classes de bibliothèque car elles ne sont pas mises à jour comme indiqué dans ADT 14 ..

Kanika

23
Kanika

Pour tous les utilisateurs d'Android Studio/Gradle

Ok les gars, comme ma tâche aujourd’hui était d’intégrer ZXING dans une application Android et qu’il n’y avait pas de bonnes sources d’informations, je vais vous donner un indice sur ce qui a fait mon succès - parce que cela s’est avéré très facile (sur la version 2. *).

Il existe un véritable référentiel git très pratique qui fournit le projet de bibliothèque zxing Android sous forme d'archive AAR.

Tout ce que vous avez à faire est d’ajouter ceci à votre build.gradle

repositories {
    mavenCentral()

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

dependencies {
    compile 'com.google.zxing:core:2.2'
    compile 'com.embarkmobile:zxing-Android-minimal:1.2.1@aar'
}

et Gradle fait toute la magie pour compiler le code et le rendre accessible dans votre application.

Pour démarrer le scanner par la suite, utilisez cette classe/méthode:

IntentIntegrator.initiateScan(this);    // `this` is the current Activity

Si vous avez déjà visité le lien, vous verrez que je viens de copier-coller le code à partir de là, le fichier readme git. Si ce n'est pas le cas, allez-y pour obtenir plus d'informations et des exemples de code!

J'espère être utile pour les futurs lecteurs. Paix :)

17
Langusten Gustel

Vous devez suivre l'étape indiquée par le lien

http://www.androidaz.com/development/zxing-qr-reader-direct-integration

vous pouvez télécharger core.jar à partir de 

http://repo1.maven.org/maven2/com/google/zxing/core/2.2/

Ce qui précède fonctionne pour moi, si votre programme insère toujours le fichier core-2.2.jar dans les bibliothèques et nettoie votre projet.

4
Piyush

J'ai eu le même problème et après des heures passées à me débattre, j'ai finalement réussi à le résoudre comme ceci. comme le montre Rubiraj 

* Clic droit sur votre projet> Propriétés> Android> (sous la bibliothèque d'onglets) Ajouter le projet Zxing *

En supposant que vous avez pu créer correctement le projet Zxing en tant que bibliothèque, comme il est expliqué ici: http://damianflannery.wordpress.com/2011/13/integrate-zxing-barcode-scanner-into-your -Android-app-natively-using-Eclipse/

3
Pej

MaterialBarcodeScanner: Lecteur de code à barres facile à utiliser pour votre projet Android (API Google Mobile Vision).

  1. Fournir une dépendance de grade

    compiler 'com.edwardvanraak: MaterialBarcodeScanner: 0.0.6-ALPHA'

  2. Construire un MaterialBarcodeScanner

    private void startScan() {
        /**
         * Build a new MaterialBarcodeScanner
         */
        final MaterialBarcodeScanner mBarcodeScanner 
                 = new MaterialBarcodeScannerBuilder()
                .withActivity(MainActivity.this)
                .withEnableAutoFocus(true)
                .withBleepEnabled(true)
                .withBackfacingCamera()
                .withText("Scanning...")
                .withResultListener(new MaterialBarcodeScanner.OnResultListener() {
                    @Override
                    public void onResult(Barcode barcode) {
                        barcodeResult = barcode;
                        result.setText(barcode.rawValue);
                    }
                })
                .build();
        mBarcodeScanner.startScan();
    }
    
  3. Accrochez-le à un bouton

    fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
     startScan();
    }
    });
    
  4. Lancer la numérisation!

2
Rajendhiran Easu

Pas à pas pour configurer zxing 3.2.1 dans Eclipse

  1. Téléchargez zxing-master.Zip à partir de " https://github.com/zxing/zxing "
  2. Décompressez zxing-master.Zip, utilisez Eclipse pour importer un projet "Android" dans zxing-master
  3. Téléchargez le fichier core-3.2.1.jar à partir de " http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/ "
  4. Créez le dossier "libs" dans le projet "Android" et collez cor-3.2.1.jar dans le dossier libs.
  5. Cliquez sur le projet: choisissez "propriétés" -> "compilateur Java" pour changer le niveau à 1.7. Cliquez ensuite sur "Android", puis "Changer la cible du projet" sur Android 4.4.2+, car l'utilisation de la version 1.7 nécessite la compilation avec Android 4.4.
  6. Si "CameraConfigurationUtils.Java" n'existe pas dans "zxing-master/Android/app/src/main/Java/com/google/zxing/client/Android/camera /". Vous pouvez le copier depuis "zxing-master/Android-core/src/main/Java/com/google/zxing/client/Android/camera /" et le coller dans votre projet.
  7. Nettoyer et construire le projet. Si votre projet affiche une erreur à propos de "switch-case", vous devez les remplacer par "if-else".
  8. Terminé. Nettoyer et construire le projet. Vous pouvez cliquer sur "Propriétés"> "Android"> cliquer sur "Est-ce que les bibliothèques" à utiliser pour votre projet
1
Anh Duy
  1. After importing Zxing as existing project, Properties > Java Buildpath > Check "is library" (check button) and then try to add Zxing as library.

  2. Make sure webclass.class exist in your QRcodesampleActivity.Java

0
Rubiraj