97 votes

Intégrer ZXing dans Android Studio

Je vais commencer par expliquer toutes les étapes que j'ai suivies et, à la fin, quel est le problème.

  1. Télécharger ZXing-2.2 https://code.google.com/p/zxing/downloads/list
  2. Extrac tous dans zxing-2.2.
  3. Téléchargez et installez Apache Ant http://www.youtube.com/watch?v=XJmndRfb1TU
  4. En utilisant la ligne de commande de Windows (Run->CMD), naviguez dans le répertoire extrait.
  5. Dans la fenêtre de la ligne de commande, tapez 'ant -f core/build.xml', appuyez sur Entrée et laissez Apache faire son travail.

En ce moment, c'est comme Intégrer la bibliothèque ZXing directement dans mon application Android

Mais Wooops, "Buildfile : core \build.xml n'existe pas ! La construction a échoué. ok. 6. Importation de ZXing - core/build.xml manquant

Maintenant oui, j'ai mon core.jar.

  1. Ouvrir Android Studio, Fichier -> Importer un projet -> Sélectionner /Android/ dans /zxing-2.2/ -> Créer un projet à partir de sources existantes -> Nom du projet : andoid -> Fichiers sources pour... tous cochés Suivant -> Bibliothèques (ne peut rien faire) Suivant -> Modules (Android coché) Suivant -> SDK 1.7 Suivant -> Terminer

Avec Projet ouvert -> Construire -> Reconstruire le projet

100 erreurs 19 avertissements

Fichier -> Structure du projet -> Bibliothèques -> Ajouter -> Java -> Sélectionner core.jar que j'ai créé auparavant et OK -> La bibliothèque 'core' sera ajoutée aux modules sélectionnés. (Android) OK -> Et OK dans la boîte de dialogue de la structure du projet.

Construire -> Reconstruire le projet

15 erreurs 20 avertissements

Toutes les erreurs sont error : constant expression required et Je vois Erreur dans les cas de commutation du projet ZXing dans Android Je change tous les interrupteurs pour d'autres.

0 erreur 20 avertissements

Ok, maintenant continue :

Fichier -> Nouveau projet -> zxing_demo Suivant -> Suivant -> Activité vierge Suivant -> Terminer

Dans le nouveau projet -> Fichier -> Importer un module -> Rechercher et sélectionner /Android/ OK -> Créer un module à partir de sources existantes Suivant -> Suivant -> Suivant -> Suivant -> Terminer

Maintenant je peux voir dans l'explorateur /Android/ /zging_demoProject/ et Bibliothèques Externes

Maintenant je change mon code pour scanner QR

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.zxing_demo"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature
    android:name="android.hardware.camera.autofocus"
    android:required="false" />
<uses-feature
    android:name="android.hardware.touchscreen"
    android:required="false" />
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.zxing_demo.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:clearTaskOnLaunch="true"
        android:stateNotNeeded="true"
        android:configChanges="orientation|keyboardHidden"
        android:name="com.google.zxing.client.android.CaptureActivity"
        android:screenOrientation="landscape"
        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>
</application>

MainActivity.java

package com.example.zxing_demo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    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) {
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            // Handle successful scan
        } else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
}

}

Maintenant, testez, Run -> Debug

Et CRASH.

Logcat

08-31 02:58:28.085  20665-20665/com.example.zxing_demo E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.zxing_demo/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1891)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
    at android.app.ActivityThread.access$600(ActivityThread.java:127)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4448)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882)
    ... 11 more

Je peux voir dans AndroidManifest.xml dans cette ligne

android:name="com.google.zxing.client.android.CaptureActivity"

"CaptureActivity" en rouge et l'erreur dit : Impossible de résoudre le symbole 'CaptureActivity'.

Fichier -> Structure du projet -> Modules -> zxing_demo -> Dépendances -> Ajouter -> Dépendance du module -> Android OK -> Appliquer et OK

Maintenant, CaptureActivity a l'air bien

Déboguer à nouveau

08-31 03:06:58.513  21740-21740/com.example.zxing_demo E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.zxing_demo/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1891)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
    at android.app.ActivityThread.access$600(ActivityThread.java:127)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4448)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882)
    ... 11 more

Je pense que je vais utiliser l'application et les intentions, mais maintenant je veux faire ce travail, si quelqu'un sait ce qui se passe dites-moi s'il vous plaît.

243voto

jan1337z Points 2088

J'ai intégré ZXING dans une application Android et il n'y avait pas de bonnes sources pour l'entrée partout, je vais vous donner un indice sur ce qui a fonctionné pour moi -. parce que ça s'est avéré être très facile .

Il y a un dépôt git très pratique qui fournit le fichier zxing Projet de bibliothèque Android en tant qu'archive AAR.

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

repositories {
    jcenter()
}

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

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 : A partir de l'activité :

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

A partir d'un fragment :

IntentIntegrator.forFragment(this).initiateScan(); // `this` is the current Fragment
// If you're using the support library, use IntentIntegrator.forSupportFragment(this) instead.

Il existe plusieurs options de personnalisation :

IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES);
integrator.setPrompt("Scan a barcode");
integrator.setCameraId(0);  // Use a specific camera of the device
integrator.setBeepEnabled(false);
integrator.setBarcodeImageEnabled(true);
integrator.initiateScan();

Ils ont un exemple de projet et fournissent plusieurs exemples d'intégration :

Si vous avez déjà visité le lien, vous allez voir que j'ai juste copié-collé le code du git README. Sinon, allez-y pour avoir plus d'informations et des exemples de code.

8voto

Smeet Points 1897

Si vous rencontrez les mêmes problèmes, suivez les étapes simples :

Importer le projet android à partir des données téléchargées zxing-master fichier zip en utilisant l'option Import project (Eclipse ADT, Gradle, etc.) et ajoutez les 2 lignes de codes suivantes dans votre niveau d'application build.gradle et vous êtes prêt à fonctionner.

Si simple, yahh...

dependencies {
        // https://mvnrepository.com/artifact/com.google.zxing/core
        compile group: 'com.google.zxing', name: 'core', version: '3.2.1'
        // https://mvnrepository.com/artifact/com.google.zxing/android-core
        compile group: 'com.google.zxing', name: 'android-core', version: '3.2.0'

    }

Vous pouvez toujours trouver la dernière version core y android core à partir des liens ci-dessous :

https://mvnrepository.com/artifact/com.google.zxing/core/3.2.1 https://mvnrepository.com/artifact/com.google.zxing/Android-core/3.2.0

MISE À JOUR (29.05.2019)

Ajoutez ces dépendances à la place :

dependencies {
    implementation 'com.google.zxing:core:3.4.0'
    implementation 'com.google.zxing:android-core:3.3.0'
}

7voto

Hardip Points 289
buttion.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                new com.google.zxing.integration.android.IntentIntegrator(Fragment.this).initiateScan();
            }
        });

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if(result != null) {
            if(result.getContents() == null) {
                Log.d("MainActivity", "Cancelled scan");
                Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
            } else {
                Log.d("MainActivity", "Scanned");
                Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
            }
        } else {
            // This is important, otherwise the result will not be passed to the fragment
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

dependencies {
    compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
    compile 'com.google.zxing:core:3.2.1'
    compile 'com.android.support:appcompat-v7:23.1.0'
}

3voto

Zhar Points 412

À partir de la version 4.x, seul Android SDK 24+ est pris en charge par défaut, et androidx est requis.

Ajoutez ce qui suit à votre fichier build.gradle :

repositories {
    jcenter()
}

dependencies {
    implementation 'com.journeyapps:zxing-android-embedded:4.1.0'
    implementation 'androidx.appcompat:appcompat:1.0.2'
}

android {
    buildToolsVersion '28.0.3' // Older versions may give compile errors
}

Anciennes versions du SDK

Pour les versions du SDK Android < 24, vous pouvez rétrograder zxing:core à la version 3.3.0 ou antérieure pour la prise en charge d'Android 14+ :

repositories {
    jcenter()
}

dependencies {
    implementation('com.journeyapps:zxing-android-embedded:4.1.0') { transitive = false }
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'com.google.zxing:core:3.3.0'
}

android {
    buildToolsVersion '28.0.3'
}

Vous en aurez également besoin dans votre manifeste Android :

<uses-sdk tools:overrideLibrary="com.google.zxing.client.android" />

Source : https://github.com/journeyapps/zxing-Android-embedded

-1voto

hirigoshy Points 41

Ce tutoriel m'aide à intégrer Android studio : http://wahidgazzah.olympe.in/integrating-zxing-in-your-Android-app-as-standalone-scanner/ si en bas essayer CE

ajoutez simplement à AndroidManifest.xml

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

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X