jueves, 29 de diciembre de 2011

Hacer un Lector de codigos QR usando Zxing

Estoy de vuelta volviendo a publicar sobre android y en esta ocacion les quiero mostrar como hacer un lector de codigos QR usando la libreria mas famosa para esto Zxing http://code.google.com/p/zxing/


Bueno antes de empezar con el tutorial les quiero comentar que hay de 2 formas de usar Zxing en android

1) via Intent

Se necesita tener instalada el lector de codigos QR de Zxing
https://market.android.com/details?id=com.google.zxing.client.android lo que haria que nuestra app dependiera de esta otra .

sin embargo si quieren hacerlo asi lo que deben hacer es lo siguiente .

 // Esto puede ir en el boton Escanear de su app



Intent intent = new Intent("com.google.zxing.client.android.SCAN");
2intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
3startActivityForResult(intent, 0);

para obtener el resultado del escaneo debemos sobre escribir el metodo onActivityResult y dejarlo asi

01public void onActivityResult(int requestCode, int resultCode, Intent intent) {
02   if (requestCode == 0) {  
03      if (resultCode == RESULT_OK) {  
04         String contents = intent.getStringExtra("SCAN_RESULT");
05         String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
06        
07      } else if (resultCode == RESULT_CANCELED) {
08         // Handle cancel
09      }
10   }
11}




listo podremos escanear codigos desde nuestra app pero como les dije arriba dependeriamos de la aplicacion de Zxing .

2) la otra es hacer uso de del codigo fuente de la libreria dentro de nuestra aplicacion , claro hay que darle el credito a Zxing por publicar sus fuentes con Apache 2.

los primero que debemos hacer es compilar el nucleo (core)  de la libreria para lo cual nos basaremos en la guia de @condesa_sama que esta bien explicado ademas explica como leer qrcodes via intent como hice yo en la parte 1.  
http://androideity.com/2011/11/23/trabajar-con-codigos-qr-en-tus-aplicaciones-android/

luego de eso lo que tenemos que hacer es modificar el manifiest de nuestra aplicacion agregando lo siguiente

<activity android:name="com.google.zxing.client.android.CaptureActivity"
02   android:screenOrientation="landscape"
03   android:configChanges="orientation|keyboardHidden"
04   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
05   android:windowSoftInputMode="stateAlwaysHidden">
06   <intent-filter>
07      <action android:name="android.intent.action.MAIN"/>
08      <category android:name="android.intent.category.DEFAULT"/>
09   </intent-filter>
10   <intent-filter>
11      <action android:name="com.google.zxing.client.android.SCAN"/>
12      <category android:name="android.intent.category.DEFAULT"/>
13    </intent-filter>
14</activity>



ademas de agregar el permiso de la camara

<uses-permission android:name="android.permission.CAMERA">

6 comentarios:

  1. hola que tal en el codigo del manifest esta en la parte de activity android:name="com.google.zxing.client.android.CaptureActivity" esto hace ke cuando ejecute la aplicacion, la clase de CaptureActiviy de la libreria como la actividad principal, pero mi problema es que como puedo hacer que CaptureActivity sea la clase principal, sea otra clase que este en el manifest y que desde esa clase dirigirme a la de la libreria zxing???

    ResponderEliminar
    Respuestas
    1. asi como esta deberia funcionar , cuantas actividades mas tienes ?

      Eliminar
  2. Hola que tal.
    Estuve siguiendo el tutoria que señalas y modificado el Manifest según lo indicas, pero al ejecutar la aplicación me envia un error que dice: "La actividad no se encuentra", puedes indicarme que esta ocurriendo?, agradezco cualquier ayuda.
    Gracias

    ResponderEliminar
  3. A mi no me funciona ,he seguido todos los pasos y no me funciona.
    Me aparece u

    ResponderEliminar
  4. "La aplicación se ve forzada a cerrarse inesperadamente"..Esto me sale cuando ejecuto click en el botón escanear con el codigo que he visto en este blog.

    ResponderEliminar