2010-01-12 10 views
162

Ho cercato su come aggiungere uno scanner di codici a barre alla mia app. Qualcuno sa di qualche esempio o sa come farlo facilmente?Utilizzo di ZXing per creare un'app per la scansione di codici a barre Android

+1

Controllare [la mia risposta dettagliata] (http://stackoverflow.com/a/30572168/165071) con schermate e app Android di esempio. –

+0

ZXing non è l'unico modo per leggere un codice a barre. A partire dal 2016, è molto più semplice utilizzare [Android Barcode API] (http://stackoverflow.com/questions/6327483/implement-bar-code-scanner-in-android/38881708#38881708). –

risposta

207

Il progetto ZXing fornisce un'applicazione di lettore di codici a barre standalone che — tramite il meccanismo di intento di Android — può essere chiamato da altre applicazioni che desiderano integrare la scansione di codici a barre.

Il modo più semplice per farlo è quello di chiamare lo ZXing SCANIntent dall'applicazione, like this:

public Button.OnClickListener mScan = new Button.OnClickListener() { 
    public void onClick(View v) { 
     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 
     } 
    } 
} 

Premendo il pulsante collegato a mScan avrebbe lanciato direttamente nella schermata dello scanner ZXing codice a barre (o crash se ZXing non è installato). Una volta che un codice a barre è stato riconosciuto, riceverai il risultato nel tuo Activity, qui nella variabile contents.

Per evitare l'arresto anomalo e semplificare le cose per voi, ZXing dispone di provided a utility class che è possibile integrare nell'applicazione per rendere più scorrevole l'installazione di ZXing, reindirizzando l'utente all'Android Market se non è già installato.

Infine, se si desidera integrare la scansione dei codici a barre direttamente nell'applicazione senza fare affidamento sull'avvio dell'applicazione ZXing separata, allora è un progetto open source e lo si può fare! :)


Edit: Qualcuno curato questa guida in questa risposta (che suona un po 'strano, non posso garantire per l'esattezza, e io non sono sicuro perché stanno utilizzando Eclipse 2015):

passo dopo passo per l'installazione ZXing 3.2.1 in Eclipse

  1. Scarica zxing-master.zip da "https://github.com/zxing/zxing"
  2. U nzip zxing-master.zip, utilizzare Eclipse per importare progetto "Android" in ZXing-master
  3. Scarica core-3.2.1.jar dalla cartella "http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/"
  4. Crea "librerie" a progetto "Android" e incollare cor -3.2.1.jar nella cartella libs
  5. Fare clic sul progetto: selezionare "Proprietà" -> "Compilatore Java" per modificare il livello in 1.7. Quindi fai clic su "Android" cambia "Project build target" su Android 4.4.2+, perché l'utilizzo di 1.7 richiede la compilazione con Android 4.4
  6. Se "CameraConfigurationUtils.java" non esiste in "zxing-master/android/app/src/main/java/com/google/ZXing/client/android/videocamera /". Puoi copiarlo da "zxing-master/android-core/src/main/java/com/google/zxing/client/android/camera /" e incollarlo nel tuo progetto.
  7. Pulire e costruire il progetto. Se il tuo progetto mostra un errore in "caso - caso", dovresti cambiarlo in "if - else".
  8. Completato. Pulisci e costruisci il progetto. È possibile fare clic su "Proprties"> "Android"> fare clic su "Is Libraries" da utilizzare per il progetto.
+0

Grazie ragazzi! Sono uno sviluppatore Android principiante e volevo davvero solo iniziare a capire cosa sarebbe servito per far funzionare uno scanner di codici a barre. Ho ancora bisogno di capire come aggiungere anche com.google.zxing al mio progetto. È così facile come usare com.google.zxing nel mio codice o devo scaricare il codice sorgente e importarlo nel mio file manifest? – wajiw

+5

(Sono il dev del progetto BTW - possiamo continuare su http://groups.google.com/group/zxing/) Christopher ha ragione. Usando un codice come questo non è necessario importare alcun codice progetto. Stai chiamando l'app Barcode Scanner tramite Intent; nessun codice di scansione del codice a barre nella tua app. –

+14

Il modo veramente carino per farlo è un po 'più di codice, che assicurerà che all'utente venga richiesto in modo pulito di installare Barcode Scanner se necessario. Questo è l'altro link a cui si riferiva.Copia il corso all'indirizzo http://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentIntegrator.java e usalo. Ancora nessun altro codice necessario. Se vuoi, puoi andare fino in fondo e incorporare il codice di scansione, ma senza un duro motivo per farlo, è solo più difficile per te. –

21

L'utilizzo dell'IntentInegrator fornito è migliore. Ti consente di richiedere all'utente di installare lo scanner del codice a barre se non lo possiede. Permette anche di personalizzare i messaggi. The IntentIntegrator.La costante REQUEST_CODE contiene il valore del codice di richiesta per onActivityResult da verificare nel blocco sopra se.

IntentIntegrator intentIntegrator = new IntentIntegrator(this); // where this is activity 
intentIntegrator.initiateScan(IntentIntegrator.ALL_CODE_TYPES); // or QR_CODE_TYPES if you need to scan QR 

IntentIntegrator.java

41

ho avuto un problema con il codice implimenting fino a quando ho trovato qualche sito (non riesco a trovare di nuovo in questo momento), che ha spiegato che è necessario includere il nome del pacchetto in nome di l'intent.putExtra.

Avrebbe tirato su l'applicazione ma non avrebbe riconosciuto alcun codice a barre e quando l'ho cambiato.

intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 

a

intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE"); 

Ha funzionato alla grande. Solo un consiglio per qualsiasi altro programmatore andorid principiante.

+1

Non riuscivo a farlo funzionare finché non ho seguito questa risposta, quindi sembra che sia essenziale farlo. Grazie per il consiglio! – casper

3

È possibile utilizzare questa guida rapida http://shyyko.wordpress.com/2013/07/30/zxing-with-android-quick-start/ con un semplice progetto di esempio per creare un'app per Android senza IntentIntegrator.

+0

Ho provato il tuo progetto di esempio e non riesco a farlo scansionare un QRCode, in logcat sto ricevendo 'com.google.zxing.NotFoundException' e' Decode Fail' ... a 'DecodeAsyncTask' (Inner class di 'PreviewCallback'), il risultato ricevuto da' onPostExecute' è sempre nullo, anche se il QRCode si trova all'interno del rettangolo di inquadratura ... inoltre non vedo né il "laser", né i punti candidati gialli che appaiono all'originale app zxing (non sono sicuro se l'hai implementata ...) lo ha trovato –

+0

! è solo la scansione in modalità orizzontale ... qualche idea su come risolverlo? –

+0

Non esiste un "laser", né i punti candidati gialli, perché è solo un esempio di come ZXing può essere integrato nel caso in cui si desideri utilizzare layout e caratteristiche diversi rispetto all'approccio Intent. Se utilizzi il layout di Intent per te, è meglio che tu stia attenta all'approccio proposto da Christopher Orr. –

9

L'utilizzo di Zxing in questo modo richiede che l'utente installi anche l'applicazione per scanner di codici a barre, che non è l'ideale. Quello che probabilmente vuoi è raggruppare Zxing direttamente nella tua app.

Consiglio vivamente l'utilizzo di questa libreria: https://github.com/dm77/barcodescanner

Prende tutte le problematiche di compilazione folli si sta andando a correre in cerca di integrare Xzing o Zbar direttamente. Usa queste librerie sotto le copertine, ma le avvolge in un'API molto semplice da usare.