scanner - Incrustar ZXing en la aplicación de Android
zxing android code (2)
Así que soy otro desafortunado principiante en desarrollo de Android que necesita tener un escáner de código de barras ZXing integrado en su aplicación.
Hay muchas preguntas sobre cómo hacer esto aquí en stackoverflow, pero ninguna de ellas tiene una respuesta que sea realmente comprensible y explicativa para un principiante. Todas las respuestas dicen algo como "todo lo que tiene que hacer es crear la biblioteca central del proyecto ZXing, hacer referencia a su proyecto y luego copiar un código del directorio android / de ZXing a su aplicación y listo". Pero esto no es muy útil para un noob.
Tengo la biblioteca central de ZXings referenciada en mi proyecto. Tengo la fuente de la aplicación Barcode Scanner abierta. Intento leer y entender el código de la aplicación Barcode Scanner, pero es demasiado complejo para mi nivel de conocimiento.
Solo quiero tener un botón en mi aplicación que, cuando se presiona, abre un escáner de código de barras, el escáner solo debe poder escanear un código de barras, decodificarlo y devolverme los números; Obtener cualquier información, etc, me haré cargo de estas cosas yo mismo. Solo necesito un escáner simple que comienza con el clic del botón, escanea el código y me da el resultado. Pero no puedo imaginar cómo hacerlo yo mismo. Supongo que esto no debería ser difícil de hacer si solo necesita copiar un texto del escáner ZXing, solo necesita entender su código.
Entonces, si alguien puede explicar esto (indique qué partes del código se debe copiar, cómo iniciar el escáner con un botón en el método de clic, etc.), hágalo. ser.
Cifre el escáner de código de barras y lo convertí en un proyecto de biblioteca, y eliminé la mayoría de las funciones que no necesita si solo está escaneando códigos de barras a través de IntentIntegrator.
El proyecto con instrucciones está disponible en https://github.com/embarkmobile/zxing-android-minimal .
Es realmente fácil incluirlo en su proyecto si ya está utilizando Maven. Si no, puede copiar el código a su proyecto, utilizando el enfoque descrito por CaspNZ.
Tuve que hacer exactamente lo que se te pide que hagas. No fue tan fácil, pero tampoco fue tan malo. También fue mi primera aplicación para Android (comercial o no). Lo que hice fue:
- Obtenga el proyecto ZXing compilado y ejecutándose en su máquina. Hay un buen tutorial sobre cómo hacer esto here .
Adapte este código para satisfacer sus necesidades. Despojé mucho del proyecto al escáner básico. Luego construí el resto de mi proyecto a su alrededor. Aquí es cómo hacer eso.
Adapte CaptureActivity en el núcleo para que sea lo más simple posible. Todo lo que necesita es el número devuelto desde el código del escáner de núcleo. Aquí hay una foto de la estructura de mi proyecto:
Lo que encontrará es que necesita modificar 4 archivos para que funcione su Clase de actividad modificada. Estos archivos son la clase CameraCaptureActivity, la clase CaptureActivityHandler y las clases Decode Thread y Decode handler. He alojado estos archivos here .
Tome estos cuatro archivos y póngalos en una copia de su proyecto de trabajo ZXing. Elimine el CaptureActivity original y los otros subprocesos y clases de manejador originales que haya reemplazado. (Ignore el archivo CaptureActivityHandlerDemo, ya que se colocó por error)
Cambie los nombres de los paquetes para que coincidan con los nombres de los paquetes de trabajo de ZXing. Asegúrese de que su actividad tenga el mismo nombre en las cuatro clases. Podría ser una buena idea pasar una interfaz que implemente "getHolder" en lugar de la propia Clase de actividad.
Asegúrese de haber actualizado su manifiesto con cualquier cambio en su nombre de actividad. Asegúrese de tener una forma de navegar a la actividad, tal vez haga que sea la clase predeterminada en el área de filtro de intento.
También he incluido un archivo de diseño para su actividad: es muy simple, pero es todo lo que necesita para que el escáner funcione. se llama camera_capture.xml
Esperemos que esto es todo lo que necesitas para ponerte en marcha. No es un proceso fácil y, lamentablemente, no puedo darle todo mi proyecto, ya que es un producto comercial.
¡¡Buena suerte!!
PD, por favor, publique cualquier pregunta como comentario sobre esta respuesta y haré todo lo posible para ayudar.