Je vais commencer par expliquer toutes les étapes que j’ai accomplies et à la fin quel est le problème.
À 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 - noyau manquant/build.xml
Maintenant oui, j'ai mon core.jar.
Avec le projet ouvert -> Construire -> Reconstruire le projet
100 erreurs 19 avertissements
Fichier -> Structure du projet -> Bibliothèques -> Ajouter -> Java -> Sélectionnez le fichier core.jar que je crée avant et OK -> La bibliothèque 'core' sera ajoutée aux modules sélectionnés. (Android) OK -> Et OK dans la boîte de dialogue Structure du projet.
Construire -> Reconstruire le projet
15 erreurs 20 avertissements
Toutes les erreurs sont des erreurs: expression constante requise et je vois Erreur dans les cas de basculement du projet ZXing sous Android Je modifie tous les commutateurs pour if elses.
0 erreurs 20 avertissements
Ok, continuez maintenant:
Fichier -> Nouveau projet -> zxing_demo Suivant -> Suivant -> Activité vide Suivant -> Terminer
Dans un nouveau projet -> Fichier -> Module d'importation -> 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 les bibliothèques externes
Maintenant, je change mon code tu scan 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 tester, Exécuter -> Déboguer
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 indique: 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 semble bon
Debug à 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 maintenant ce qui se passe, dites-le moi s'il vous plaît.
J'intégrais ZXING dans une application Android et il n'y avait aucune bonne source pour la saisie, je vais vous donner un indice sur ce qui a fonctionné pour moi - , car il tournait être très facile .
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 {
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
À 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 verrez que je viens de copier-coller le code à partir du fichier README de git. Sinon, allez-y pour avoir plus d'informations et des exemples de code.
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'
}
Toute personne confrontée aux mêmes problèmes, suivez les étapes simples suivantes:
Importez le projet Android
à partir du fichier zxing-master
téléchargé en utilisant l’option Import project (Eclipse ADT, Gradle, etc.)
et ajoutez les 2 lignes de codes suivantes dans votre fichier build.gradle
de niveau application et vous êtes prêt à exécuter.
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
et Android core
parmi les liens ci-dessous:
https://mvnrepository.com/artifact/com.google.zxing/core/3.2.1https://mvnrepository.com/artifact/com.google.zxing/Android- noyau/3.2.
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'
}