2010-01-12 29 views
162

He estado buscando cómo agregar un escáner de código de barras a mi aplicación. ¿Alguien sabe de algún ejemplo o sabe cómo hacer esto fácilmente?Uso de ZXing para crear una aplicación de escaneo de códigos de barras de Android

+1

Compruebe [mi respuesta detallada] (http://stackoverflow.com/a/30572168/165071) con capturas de pantalla y una aplicación de ejemplo de Android. –

+0

ZXing no es la única forma de leer un código de barras. A partir de 2016, es mucho más fácil usar [Android Barcode API] (http://stackoverflow.com/questions/6327483/implement-bar-code-scanner-in-android/38881708#38881708). –

Respuesta

207

El proyecto ZXing proporciona una aplicación de lector de códigos de barras independiente que — a través del mecanismo de intención de Android — puede ser llamado por otras aplicaciones que deseen integrar el escaneo de códigos de barras.

La forma más sencilla de hacerlo es llamar al ZXing SCANIntent desde la aplicación, 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 
     } 
    } 
} 

Al pulsar el botón vinculado a mScan lanzaría directamente en la pantalla del escáner ZXing código de barras (o choque si ZXing no está instalado). Una vez que se ha reconocido un código de barras, recibirá el resultado en su Activity, aquí en la variable contents.

Para evitar el colapso y simplificar las cosas, ZXing tiene provided a utility class que puede integrar en su aplicación para hacer la instalación de ZXing más suave, redirigiendo al usuario al Android Market si no lo tienen instalado ya.

Finalmente, si desea integrar el escaneo de códigos de barras directamente en su aplicación sin tener que instalar la aplicación ZXing por separado, entonces es un proyecto de código abierto y ¡puede hacerlo! :)


Editar: Alguien editado esta guía en esta respuesta (que suena un poco extraño, no puedo dar fe de su exactitud, y no estoy seguro de por qué están usando Eclipse en 2015):

paso a paso para ZXing configuración 3.2.1 en Eclipse

  1. Descargar zxing-master.zip de "https://github.com/zxing/zxing"
  2. U NZip zxing-master.zip, utilizar Eclipse para importar proyecto "android" en ZXing-master
  3. Descargar núcleo-3.2.1.jar de la carpeta "http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/"
  4. Crear "libs" en proyecto "androide" y pegar cor -3.2.1.jar en la carpeta libs
  5. Haga clic en el proyecto: elija "propiedades" -> "Compilador de Java" para cambiar el nivel a 1.7. A continuación, haga clic en "Android" cambie "Objetivo de compilación del proyecto" a Android 4.4.2+, porque el uso de 1.7 requiere la compilación con Android 4.4
  6. Si "CameraConfigurationUtils.java" no existe en "zxing-master/android/app/src/main/java/com/google/zxing/client/android/camera/". Puede copiarlo de "zxing-master/android-core/src/main/java/com/google/zxing/client/android/camera /" y pegarlo en su proyecto.
  7. Limpiar y construir proyecto. Si su proyecto muestra un error sobre "switch - case", debe cambiarlo a "if - else".
  8. Completado. Limpiar y construir proyecto. Puede hacer clic en "Propriedades"> "Android"> hacer clic en "Es Bibliotecas" para usar en su proyecto.
+0

¡Gracias chicos! Soy un desarrollador de Android nuevo y realmente solo quería empezar a descubrir qué se necesitaría para que funcione un escáner de código de barras. Aún necesito averiguar cómo agregar com.google.zxing a mi proyecto. ¿Es tan fácil como usar com.google.zxing en mi código o tengo que descargar el código fuente e importarlo a mi archivo de manifiesto? – wajiw

+5

(Soy el desarrollador del proyecto BTW - podemos continuar en http://groups.google.com/group/zxing/) Christopher tiene razón. Al usar un código como este, no necesita importar ningún código de proyecto. Está llamando a la aplicación Barcode Scanner a través de Intent; no hay código de escaneo de código de barras en su aplicación. –

+14

La forma realmente agradable de hacerlo implica un poco más de código, lo que asegurará que se solicite al usuario que instale Barcode Scanner si es necesario. Ese es el otro enlace al que se refirió.Copie la clase en http://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentIntegrator.java y use eso. Nuevamente, no se necesita otro código. Si lo desea, puede ir hasta el final e insertar el código de escaneo, pero sin un motivo difícil para hacerlo, es más difícil para usted. –

21

El uso del IntentInegrator proporcionado es mejor. Le permite solicitarle a su usuario que instale el escáner de código de barras si no lo tiene. También te permite personalizar los mensajes. El IntentIntegrator.La constante REQUEST_CODE contiene el valor del código de solicitud para onActivityResult para verificar en el bloque if anterior.

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

que tenía un problema con el código implimenting hasta que encontré un sitio web (no puedo encontrar de nuevo en este momento) que explicó que es necesario incluir el nombre del paquete en el nombre de el intent.putExtra.

Arrancaba la aplicación pero no reconocía ningún código de barras y cuando lo cambiaba.

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

a

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

Se trabajó mucho. Solo un consejo para cualquier otro programador andorid novato.

+1

No pude hacerlo funcionar hasta que seguí esta respuesta, por lo que parece que es esencial hacerlo. ¡Gracias por el consejo! – casper

3

Puede usar esta guía de inicio rápido http://shyyko.wordpress.com/2013/07/30/zxing-with-android-quick-start/ con un proyecto de ejemplo simple para crear aplicaciones de Android sin IntentIntegrator.

+0

He intentado su proyecto de ejemplo y no puedo escanear un código QR, en logcat obtengo 'com.google.zxing.NotFoundException' y' Decode Fail' ... en 'DecodeAsyncTask' (Clase interna) de 'PreviewCallback'), el resultado recibido por' onPostExecute' siempre es nulo, incluso si el QRCode está dentro del rectángulo de encuadre ... tampoco veo ni el "láser", ni los puntos candidatos amarillos que aparecen en el original aplicación zxing (no estoy seguro si has implementado eso ...) –

+0

lo encontraste! solo está escaneando en modo paisaje ... alguna idea de cómo resolver esto? –

+0

No existe un "láser", ni los puntos candidatos amarillos, porque es solo un ejemplo de cómo se puede integrar ZXing en caso de que quiera utilizar un diseño y características diferentes a los del enfoque con intención. Si usar el diseño de Intento está bien para usted, será mejor que se quede con el enfoque propuesto por Christopher Orr. –

9

El uso de Zxing de esta manera requiere que el usuario también instale la aplicación de escáner de código de barras, lo que no es ideal. Lo que probablemente desee es incluir Zxing en su aplicación directamente.

Le recomiendo usar esta biblioteca: https://github.com/dm77/barcodescanner

Toma todas las cuestiones de construcción locos que vas a correr en tratar de integrar Xzing o Zbar directamente. Utiliza esas bibliotecas debajo de las cubiertas, pero las envuelve en una API muy simple de usar.

Cuestiones relacionadas