Solución:
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 invocada por otras aplicaciones que deseen integrar el escaneo de códigos de barras.
La forma más sencilla de hacer esto es llamar al ZXing SCAN
Intent
desde su aplicación, así:
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
}
}
}
Pulsando el botón vinculado a mScan
se iniciaría directamente en la pantalla del escáner de código de barras ZXing (o fallaría si ZXing no está instalado). Una vez que se haya reconocido un código de barras, recibirá el resultado en su Activity
, aquí en el contents
variable.
Para evitar fallas y simplificar las cosas para usted, ZXing ha proporcionado una clase de utilidad que puede integrar en su aplicación para hacer que la instalación de ZXing sea más fluida, al redirigir al usuario al Android Market si aún no lo tiene instalado.
Finalmente, si desea integrar el escaneo de códigos de barras directamente en su aplicación sin depender de tener instalada la aplicación ZXing separada, entonces es un proyecto de código abierto y puede hacerlo. 🙂
Editar: Alguien editó esta guía en esta respuesta (suena un poco extraño, no puedo dar fe de su precisión y no estoy seguro de por qué están usando Eclipse en 2015):
Paso a paso para configurar zxing 3.2.1 en eclipse
- Descargue zxing-master.zip desde “https://github.com/zxing/zxing”
- Descomprima zxing-master.zip, use eclipse para importar el proyecto “android” en zxing-master
- Descarga core-3.2.1.jar desde “http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/”
- Cree la carpeta “libs” en el proyecto “android” y pegue cor-3.2.1.jar en la carpeta libs
- Haga clic en el proyecto: elija “propiedades” -> “Compilador de Java” para cambiar el nivel a 1.7. Luego haga clic en “Android”, cambie “Objetivo de compilación del proyecto” a Android 4.4.2+, porque el uso de 1.7 requiere compilar con Android 4.4.
- 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.
- Proyecto de limpieza y construcción. Si su proyecto muestra un error sobre “switch – case”, debe cambiarlo a “if – else”.
- Terminado. Proyecto de limpieza y construcción. Puede hacer clic en “Propiedades”> “Android”> haga clic en “Es bibliotecas” para utilizar en su proyecto.
Tuve un problema con la implementación del código hasta que encontré un sitio web (no puedo encontrarlo de nuevo en este momento) que explica que debe incluir el nombre del paquete en el nombre de intent.putExtra.
Abría la aplicación, pero no reconocía ningún código de barras, y cuando lo cambiaba.
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
para
intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE");
Funcionó muy bien. Solo un consejo para cualquier otro programador novato de Android.
Usar el IntentInegrator proporcionado es mejor. Le permite pedirle a su usuario que instale el escáner de código de barras si no lo tiene. También te permite personalizar los mensajes. La constante IntentIntegrator.REQUEST_CODE contiene el valor del código de solicitud para que onActivityResult se verifique 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