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!