martes, 19 de agosto de 2014

Aplicación para leer códigos QR utilizando la librería Zxing para dispositivos Android

Objetivo

Generar la aplicación BarcodeScanner para dispositivos Android y probarlo con el emulador y la cámara web. 
Esta aplicación se crea a partir del código abierto ZXing.
Con esta aplicación se puede procesar la información que proviene de las imágenes 1D/2D para la lectura de código barra. En este caso particular se hará la prueba con un código de barra bidimensional conocido como "Código QR"



0. Pre-requisitos

1. Crear un proyecto


1.1 Elegir un nombre para el proyecto, por ejemplo MyBarcodeScanner



1.2 Mínimo SDK requerido, en este caso usaremos el API 17 (versión 4.2 Jelly Bean).



1.3 Agregamos una Actividad vacía (solo lo usaremos como referencia, ya que posteriormente será eliminada).



1.4 Agregamos nombre para la actividad, por ejemplo MyActivity.



1.5 Finalizamos y esperamos.



1.6 Se mostrará el siguiente mensaje si es que la construcción del proyecto no tuvo errores.




2. Descargar código fuente Zxing desde github


2.1 Link del código fuente ZXing.
https://github.com/zxing/zxing

2.2 Una vez descargado el archivo ZIP, descomprimir




3. Copiar contenido desde el directorio zxing-master/android

3.1 Ingresamos al directorio zxing-master/android.



3.2 Copiar el directorio zxing-master/android/src/com.



y pegarlo dentro del directorio “java” del Proyecto (clic derecho en directorio “java” y Pegar)




Aceptamos el siguiente aviso



Se creará el siguiente árbol dentro del directorio “java”


3.3 Lo mismo hacemos para directorio zxing-master/android/res



y lo pegamos dentro del directorio “main” del Proyecto



Aceptamos el siguiente mensaje




Sobrescribimos todo y esperamos.


Tendremos el nuevo árbol dentro del directorio “res” del Proyecto.


3.4 Hacemos lo mismo para el directorio zxing-master/android/asset


El cual pegamos dentro del directorio “main” del Proyecto


Aceptamos el siguiente mensaje


Tendremos el nuevo árbol dentro del directorio “main” del Proyecto.


3.5 Copiamos el archivo zxing-master/android/AndroidManifest.xml


y lo reemplazamos por el archivo AndroidManifest.xml del proyecto.


Aceptamos el siguiente mensaje


Sobrescribimos el anterior


3. Copiar contenido desde el directorio zxing-master/core.

3.1 Copiamos el directorio zxing-master/core/src/main/java/com


Y lo pegamos dentro del directorio “java” del Proyecto


4. Copiar contenido desde el directorio zxing-master/android-core

4.1 Copiamos el directorio zxing-master/android-core/src/main/java/com



y lo pegamos dentro del directorio “java” del Proyecto

5. Eliminar archivos

5.1 Eliminamos el archivo activity_my.xml que fue creado automáticamente en el Proyecto


Utilizamos Eliminación segura


5.2 Lo mismo hacemos para MyActivity


Utilizando Eliminación segura


5.3 Lo mismo hacemos para my.xml


Utilizando Eliminación segura


6. Modificar opciones de compilación


6.1 Editar el archivo build.gradle que se encuentra dentro del directorio “app


Agregar lo siguiente


Sincronizar y aceptar



7. Crear un emulador AVD


7.1 En este caso se creará un emulador con las siguientes características. No olvidar asignar la cámara web de tu laptop u ordenador en la opción Front Camera (importante para capturar la imagen del código QR)

8. Ejecutar la aplicación.

8.1 Ejecutar la aplicación con Shift+F10 o haciendo click en el icono
8.2 Seleccionar el emulador creado previamente.



9. Probar la aplicación

9.1 Acercar la imagen de algún código QR hacia la cámara web
9.2 La aplicación se encargará de escanear el código utilizando la cámara web. Una vez la detecte, mostrará su contenido.

9.3 El ícono de la aplicación es el siguiente:



10. Personalizar el Proyecto.

Con el código fuente de Zxing y la aplicación funcionando, ya es posible hacer las modificaciones para personalizar el proyecto según nuestras necesidades.

19 comentarios :

  1. Estimado. Me tira el siguiente error.
    Que puedo hacer?



    Error:(26, 0) Build script error, unsupported Gradle DSL method found: 'compileOptions()'!

    Possible causes could be:
    - you are using Gradle version where the method is absent (Fix Gradle settings)
    - you didn't apply Gradle plugin which provides the method (Apply Gradle plugin)
    - or there is a mistake in a build script (Goto source)

    ResponderEliminar
    Respuestas
    1. Hola ya resolviste el problema me sucede algo similar ocupo ayuda

      Eliminar
    2. Tambien nos muestra el error de gradel xfavoor ayudaaaa

      Eliminar
    3. Agregre esa parte de esta manera

      apply plugin: 'com.android.application'

      android {
      compileSdkVersion 24
      buildToolsVersion "23.0.3"

      defaultConfig {
      applicationId "com.vgs.jaguarsoft.vgs"
      minSdkVersion 16
      targetSdkVersion 24
      versionCode 1
      versionName "1.0"
      }
      buildTypes {
      release {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
      }
      }

      compileOptions {
      sourceCompatibility JavaVersion.VERSION_1_7
      targetCompatibility JavaVersion.VERSION_1_7
      }
      }

      dependencies {
      compile fileTree(dir: 'libs', include: ['*.jar'])
      testCompile 'junit:junit:4.12'
      compile 'com.android.support:appcompat-v7:24.2.0'
      }

      Eliminar
  2. Hola, yo deshice el punto 6.1 y funcionó en un MotoX

    Gracias por el aporte!

    ResponderEliminar
    Respuestas
    1. hola amigo yo tambien no hize el paso 6.1 ... que vercion de android y sdk tenias o kme podrias pasar el apk porfavor te lo agradeseria mucho

      Eliminar
  3. Hola,
    al momento de compilar me da el siguiente error:
    "Error:(57, 30) error: cannot find symbol variable BookmarkColumns".
    Cada vez que se usa: Browser.BookmarkColumns.
    Alguna idea?
    Gracias.

    ResponderEliminar
  4. Hola,
    al correrlo me da un error en
    Error:(57, 30) error: cannot find symbol variable BookmarkColumns

    pudiera ayudarme gracias.

    ResponderEliminar
  5. Hola,
    Tengo un problema al importar
    android.provider.Browser;
    no encuentra Browser.BookmarkColumns

    ResponderEliminar
  6. buen tutorial, felicitaciones. Para las personas que les haya dado el error de la variable BookmarkColumns, lo que hice fue compilar con la version 20 o 19, ya que a partir con la version del sdk 23 ya no funciona.

    http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-bookmark-browser

    ResponderEliminar
  7. Hola, podrian ayudarme con el siguiente error:

    Error:Execution failed for task ':app:processDebugResources'.
    > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Users\FRANKLIN\AppData\Local\Android\Sdk\build-tools\23.0.1\aapt.exe'' finished with non-zero exit value 1
    Error:(4) Error retrieving parent for item: No resource found that matches the given name 'AppTheme'.


    El error aparece al momento de compilar.

    Muchas gracias por su ayuda !!!

    ResponderEliminar
  8. Error:(4) Error retrieving parent for item: No resource found that matches the given name 'AppTheme'.


    Este error sale primero y luego






    Error:Execution failed for task ':app:processDebugResources'.
    > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Users\FRANKLIN\AppData\Local\Android\Sdk\build-tools\23.0.1\aapt.exe'' finished with non-zero exit value 1
    Error:(4) Error retrieving parent for item: No resource found that matches the given name 'AppTheme'.

    ResponderEliminar
  9. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  10. Hola, primero gracias por el aporte.
    Te cuento que al ejecutar o compilar me sale un error en la clase CameraConfigurationManager.java
    Error:(124, 24) error: cannot find symbol variable CameraConfigurationUtils

    Por cualquier ayuda muchas gracias.

    ResponderEliminar
  11. Parcero gracias por el post saludos desde colombia no habia logrado pasarlo a android studio funcionando en version 2.2.1 de android studio gracias a vos.

    ResponderEliminar
  12. Me funciona en dispositivos con versiones de Android inferiores a la 6.0, con la 6.0 o superiores da error, o no es compatible...

    ResponderEliminar