Incorporación de ZXing en la aplicación de Android

Así que soy otro principiante de desarrollo androide desafortunado que necesita tener escáner de código de barras ZXing incrustado en su aplicación.

Hay un montón de preguntas preguntando cómo hacer esto aquí en stackoverflow, pero ninguno de ellos tiene una respuesta que es realmente comprensible y explicativo para un principiante. Todas las respuestas dicen algo así como "todo lo que tienes que hacer es construir el núcleo de lib de proyecto ZXing, hacer referencia a su proyecto y luego copiar algún código del directorio android / de ZXing a su aplicación y ya está". Pero esto no es muy útil para un noob.

Tengo la biblioteca de la base de ZXings referenciada en mi proyecto. Tengo la fuente de la aplicación de escáner de código de barras abierta. Estoy tratando de leer y entender el código de la aplicación Barcode Scanner, pero es demasiado complejo para mi nivel de conocimiento.

Sólo 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 sólo debe ser capaz de escanear un código de barras, descodificar y devolverme los números, no es necesario enviar el código a cualquier lugar Obtener cualquier información, etc, enfermo cuidar de estas cosas yo mismo. Sólo necesito un escáner simple que empiece con el botón de clic, 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 sólo necesita copiar algún texto del escáner ZXing, sólo tiene que entender su código.

Así que si alguien puede explicar esto (decir qué partes de código para copiar, cómo iniciar el escáner en un método onClick botones), por favor, hágalo, estoy seguro de que hay un montón de personas que estarán muy agradecidas por esto al igual que lo haré ser.

Tuve que hacer exactamente lo que se le pide que haga. No fue tan fácil, pero tampoco fue tan malo. También fue mi primera aplicación (comercial o de otro tipo) para Android. Lo que hice fue:

  • Obtenga el proyecto de ZXing compilado y ejecutándose en su máquina. Hay un buen tutorial sobre cómo hacer esto aquí .
  • Adapte este código a sus necesidades. Despojé mucho del proyecto a un escáner básico. Entonces construí el resto de mi proyecto alrededor de él. He aquí cómo hacerlo.

  • Adapte la CaptureActivity en core para que sea lo más simple posible. Todo lo que necesita es el número devuelto desde el código del escáner principal. Aquí está una imagen de la estructura de mi proyecto:

Estructura del proyecto ZXing adaptado

  • Lo que encontrarás es que necesitas modificar 4 archivos para que tu clase de actividad modificada funcione. Estos archivos son la clase CameraCaptureActivity, la clase CaptureActivityHandler y las clases de procesador Decode Thread y Decode. He recibido estos archivos aquí .

  • Tome estos cuatro archivos y póngalos en una copia de su proyecto de trabajo ZXing. Quite la captura original de CaptureActivity y las otras clases originales de hilos y manejadores que ha reemplazado. (Ignorar el archivo CaptureActivityHandlerDemo, ya que fue puesto allí por error)

  • Cambie los nombres de los paquetes para que coincidan con los nombres de los paquetes ZXing activos. Asegúrese de que su Actividad tenga el mismo nombre en las cuatro clases. Puede ser una buena idea pasar una interfaz que implemente "getHolder" en lugar de la clase de actividad en sí.

  • 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 la convierta en la clase predeterminada en el área de filtro de intenciones.

  • He incluido un archivo de diseño para su actividad también – 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 necesita para ponerse en marcha. No es un proceso fácil y, por desgracia, no puedo darle todo mi proyecto, ya que es un producto comercial.

¡¡Buena suerte!!

PS por favor publicar cualquier pregunta como comentarios sobre esta respuesta y haré mi mejor esfuerzo para ayudar.

Bifurqué el Barcode Scanner y lo convertí en un proyecto de biblioteca, y eliminé la mayor parte de la funcionalidad que no necesitas si solo estás 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á usando Maven. Si no es así, puede copiar el código en su proyecto utilizando el método descrito por CaspNZ.

  • ¿Puedo controlar la linterna sin usar android.hardware.Camera?
  • Cómo reiniciar la cámara de manera eficiente en un fragmento - Barcode Scanner
  • Cómo leer varios códigos qr de una imagen usando la biblioteca zxing
  • Escaneo de códigos de barras / código de barras de ZXing QR
  • Integración de la biblioteca de ZXing directamente en mi aplicación de Android
  • OnActivityResult Nunca se llama Phonegap Córdoba
  • EXCEPCIÓN INESPERADA DE SUPERIOR NIVEL: com.android.dex.DexException
  • Cómo usar la biblioteca de ZXing sin instalar la aplicación barcodescanner
  • Integre ZXing en Android Studio
  • Cómo importar la biblioteca ZXING en la aplicación Android?
  • Uso de ZXing para crear una aplicación de escaneo de códigos de barras Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.