viernes, 27 de enero de 2012

zXing - Integración usando IntentIntegrator&IntentResult

Viendo que este tutorial sobre zXing es bastante visitado, he pensado en hacer otro pero usando las clases de utilidad para integracion que ofrece zXing.

Estas clases facilitan mucho el uso del scanner, ya que lo unico que hacen es llamar a la aplicacion BarcodeScanner de zXing e incluso te la instalan si no lo tienes!, asi no necesitas modificar prácticamente nada en tu proyecto, simplemente incluir dichas clases y a disfrutar xD.

El proceso es el siguiente:

Te pillas del repositorio el IntentIntegrator.

Nota: He visto que han sacado otras versiones de este archivo (para android 4.0, 3.0...), yo lo probe con el que he puesto y funciona.

Te pillas tambien el IntentResult.

Estas 2 clases las metes en tu proyecto, donde quieras.

Y ahora añades el siguiente código en la zona donde quieras que se lance el scanner del zXing, (por ejemplo en el onClick() de un botón), cambiando yourActivity por la actividad que quieres que maneje el intent, (generalmente con this servirá).

IntentIntegrator integrator = new IntentIntegrator(yourActivity);
integrator.initiateScan();

Con esto escanearía todo tipo de códigos, si quieres limitarlo, puedes usar las siguientes constantes finales de la propia clase, pasandoselas al initiateScan().

IntentIntegrator.QR_CODE_TYPES
IntentIntegrator.PRODUCT_CODE_TYPES
IntentIntegrator.ONE_D_CODE_TYPES
IntentIntegrator.DATA_MATRIX_TYPES

Y actualizas o creas el onActivityResult() de tu activity con este codigo.
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
  IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
  if (scanResult != null && scanResult.getContents() != null) {
    String raw = scanResult.getContents();
    // handle scan result
  }
  // else continue with any other code you need in the method
  ...
}

Que te devuelve la información del intent, usando el metodo getContents().

Como lo explican en la página de zXing (aqui) a mi me dio problemas, así que probad este sistema.
Además si quieres personalizar el texto que aparece cuando la aplicación no esta instalada, modifica las variables de la clase IntentIntegrator
IntentIntegrator.DEFAULT_TITLE
IntentIntegrator.DEFAULT_MESSAGE
IntentIntegrator.DEFAULT_YES
IntentIntegrator.DEFAULT_NO

Pues esto es todo, bastante sencillo aunque no queda tan chulo como meter el scannner en tu proyecto, pero bueno, algo es algo. Un saludo!

No hay comentarios:

Publicar un comentario

Ponte un nombre aunque sea falso, que Anó-nimo queda mu feo :(