Funcionalidades extras para la plataforma ANDROID: Lectura de
Cdigo QR
Objetivos: Que el estudiante: Importe y configure la librera Zxing para su proyecto y resuelva problemas que se puedan dar en el proceso de importacin. Aprenda a agregar permisos a su aplicacin y a registrar activities de proyectos externos que se utilizan como librera. Pueda leer y manipular cdigos QR utilizando la librera Zxing y accediendo a la cmara del telfono Descripcin: Esta prctica consistir en leer cdigos QR generados por una aplicacin externa. La aplicacin leer el cdigo QR que estar en formato: nombre: <valor_nombre>,carnet:<valor_carnet y mostrara los resultados de la lectura en otro activity.
2
Contenido Generacin de cdigos QR .................................................................................................................. 1 Lectura del Cdigo QR. ........................................................................................................................ 2 Descargando Zxing .......................................................................................................................... 2 Configurando Zxing como librera ................................................................................................... 3 Importacin de la librera. ............................................................................................................... 3 Solucionando los errores. ................................................................................................................ 7 1. Cambiar el Java Compliance. ............................................................................................... 8 2. Agregue el core ................................................................................................................. 10 3. Otros errores ..................................................................................................................... 13 Usando Zxing como librera. .......................................................................................................... 13 Usando Zxing en nuestro proyecto. .................................................................................................. 15 Agregue referencia a zxing ............................................................................................................ 16 Agregue permisos.......................................................................................................................... 17 Registre la activity. ........................................................................................................................ 20 Lectura de cdigos ........................................................................................................................ 22 Controlador de MainActivity ......................................................................................................... 23 Controlador de Resultado ............................................................................................................. 24 Aplicacin funcionando. .................................................................................................................... 26
1
Generacin de cdigos QR Generador de cdigos QR Link : http://es.qr-code-generator.com/
1. Seleccione la opcin Texto 3. Presione Crear QR Code 2.Digite sobre el cuadro de texto comentario: Nombre<valor>;Carnet:<valor> 4. Descargue el cdigo. 2
Lectura del Cdigo QR. Para que nuestra aplicacin sea capaz de leer cdigos QR haremos uso de la librera zxing que es una librera para el procesamiento de cdigos de barra para cliente Android y Java. Zxing consta de 2 partes uno es el proyecto con ejemplos de prueba y otro el core que es un archivo jar. Sin ambas partes el proyecto no funcionara. Descargando Zxing Primeramente vamos a descargar el proyecto zxing de la siguiente direccin: Librera Zxing Link de descarga: https://github.com/zxing/zxing
Ahora procedemos a descargar la librera:
3
Luego descargue el core de zxing de la siguiente direccin: Zxing Core Link de descarga: http://mvnrepository.com/artifact/com.google.zxing/core
Para la fecha de creacin de esta gua la versin ms reciente es la 3.0. Presionamos en binary y procedemos a la descarga
Configurando Zxing como librera Importacin de la librera.
Ahora que ya tenemos el proyecto con los ejemplos y el core de zxing vamos a aadirlo a nuestro proyecto configurado como una librera. El primer paso es importar el proyecto de ejemplo. Nos dirigiremos a la barra de herramientas luego file y despus import. Como se muestra en la figura: 4
Luego seleccionamos la opcion de Existing Android Code Into Workspace 5
Navegamos hasta encontrar la carpeta donde se descomprimi Zxing. La carpeta que necesitamos es la que contiene los ejemplos para android. Esta carpeta se encuentra en zxing- master/android. Seleccione la carpeta android. 6
7
Marque el proyecto a importar y presione Finalizar. Revise que el nombre del nuevo proyecto se llame CaptureActivity. Solucionando los errores.
8
Una vez que importe el proyecto puede que contenga errores para solucionarlos vamos a realizar 3 pasos. 1. Cambiar el Java Compliance. Ingrese a las propiedades del proyecto. Esto se hace presionando click derecho sobre el proyecto y luego seleccionando Properties
9
Dentro de las propiedades seleccione Java Compiler y cambie el Compiler compliance level a 1.7 y las dems a 1.7.
Eclipse nos preguntara si deseamos reconstruir el proyecto a lo que responderemos que s. 10
2. Agregue el core Para agregar el core crearemos una carpeta con el nombre de libs. Para crear la carpeta hacemos click derecho sobre el proyecto y seleccionamos New y luego Folder 11
12
Asignamos el nombre a la carpeta en Folder name digitamos libs. Ahora copiamos el core de zxing dentro de esta carpeta. Copiando y pegando desde la ubicacin donde se encuentra el archivo jar hasta la carpeta libs en el mismo IDE sin necesidad de usar el explorador de archivos.
13
3. Otros errores
En ocasiones se da un error debido a los cambios recientes en versiones de android. Este error generalmente se da en los switch que el IDE solicita que sean cambiados por if-else. Si sucede este error siga este procedimiento para solucionarlo: Coloque el cursor sobre la palabra swich. Presione Ctrl+1 Seleccin Convert switch to if-else Usando Zxing como librera. Luego de haber solucionado los errores es momento de configurar Zxing como librera para ello seguiremos el siguiente procedimiento: Ingresamos nuevamente a las propiedades del proyecto. Haciendo click derecho sobre este y luego a propiedades:
14
15
Seleccionamos Android y luego marcamos Is Library
Usando Zxing en nuestro proyecto. Luego de solucionar los errores y de haber configurado Zxing como librera. Vamos a crear nuestro proyecto que escaneara cdigos QR y que presentara el nombre y el carnet ledos en otro activity. Cree un nuevo proyecto. El nombre del proyecto debe de ser CarnetLectorQR. Cuando termine de crear su proyecto realice los siguientes pasos 16
Agregue referencia a zxing
Seleccione nuevamente las propiedades del proyecto. Dirjase nuevamente a Android presione en Add..
17
Ahora agregue el proyecto de Zxing CaptureActivity.
Agregue permisos
Para que nuestra aplicacin funcione necesitamos del permiso para acceder a la cmara. Para esto vamos a editar el archivo AndroidManifest de la aplicacin. Seleccione el archivo AndroidManifest.xml 18
Luego en la parte inferior buscamos Permissions y luego presionamos Add
19
Seleccionar Uses permission
Buscamos en NAME. El permiso de la cmara android.permission.CAMERA
20
Luego de seleccionar el permiso de la cmara
Presionamos doble click sobre el permiso.
Guardamos los cambios. Registre la activity. Dentro del manifest dentro de la seccin activities agregamos el siguiente cdigo. Esto se hace para que no se produzca un error cuando se invoca la actividad del proyecto de ejemplo desde nuestro proyecto.
Lectura de cdigos Recordando vamos a crear una pequea aplicacin la cual consistir en leer cdigos QR generados por una aplicacin externa. La aplicacin leer el cdigo QR que estar en formato: nombre: <valor_nombre>,carnet:<valor_carnet y mostrara los resultados de la lectura en otro activity. Indicaciones. 1. Crear un activity y dentro de el aadir un botn por defecto esta actividad puede ser la MainActivity. (Puede utilizar el activity que se creo al inicio) a. Defina la ejecucin de un mtodo en el evento On Click del botn. b. El mtodo que se ejecuta debe tener como nombre Scan Para definir un mtodo en el evento On Click seguimos el siguiente procedimiento: Seleccione el botn. Dentro del cuadro de propiedades buscamos el mtodo On Click Dentro de la casilla del Metodo escribimos Scan Como se muestra en el cdigo siguiente
2. Crear un activity que tenga como nombre Resultado con 2 EditText. a. Estos 2 EditText deben tener como id:editNombre y editCarnet. 3. Mejore la aplicacin y agregue controles donde considere necesario.
23
Controlador de MainActivity
public void Scan(View v){
Intent intent = new Intent("com.google.zxing.client.android.SCAN"); startActivityForResult(intent, 0);
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == 0) { if (resultCode == RESULT_OK) { String contenido = intent.getStringExtra("SCAN_RESULT"); Intent resultado=new Intent(this,Resultado.class); resultado.putExtra("caracteres_leidos",contenido); startActivity(resultado);
// Hacer algo con los datos obtenidos. } else if (resultCode == RESULT_CANCELED) { // Si se cancelo la captura. Toast.makeText(this,"Se cancelo el ESCANEO", Toast.LENGTH_LONG).show(); } } } Definimos un objeto de la clase Intent para poder ejecutar el CaptureActivity del proyecto Zxing. Iniciamos la activity con el mtodo startActivityResult(intent,0) en espera de resultados. Intent intent = new Intent("com.google.zxing.client.android.SCAN"); startActivityForResult(intent, 0);
Ahora se programara el procesamiento de los resultados luego de ejecutar el SCAN. En general el mtodo onActivityResult para manipular la lectura del cdigo tiene la siguiente estructura: public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == 0) { if (resultCode == RESULT_OK) {
//Procesar la informacin obtenida } else if (resultCode == RESULT_CANCELED) { // Informar al usuario que se cancelo } } }
Obtenemos el resultado del SCAN mediante: intent.getStringExtra("SCAN_RESULT"); Ahora creamos un Intent y agregamos un parmetro con el nombre de caracteres_leidos y con un valor de contenido. En contenido se encuentra el resultado de la lectura del scan. Este parmetro ser ledo por otra activty. else if (resultCode == RESULT_CANCELED) { // Si se cancelo la captura. Toast.makeText(this,"Se cancelo el ESCANEO", Toast.LENGTH_LONG).show(); }
Si se cancela el scan, informamos mediante un Toast que se cancel el SCAN. Controlador de Resultado
Sustituya el metodo onCreate de Resultado por el siguiente:
} Mediante el objeto de la clase Bundle obtenemos los parmetros que fueron enviados a travs del MainActivity. La lectura del cdigo se obtiene el mtodo getString que recibe como parmetro caracteres_leidos.. Luego se procesan la cadena obtenida asumiendo que tendrn el formato nombre: <valor_nombre>,carnet:<valor_carnet y asumiendo que el cdigo tendr solamente 4 palabras. Asumimos que la segunda palabra leida es el nombre y la cuarta y ltima es el carnet. Finalmente el nombre y el carnet leidos son presentados en 2 EditText por separados.
NOTA: La aplicacin debe ejecutarse en un dispositivo fsico Abra el cdigo creado anteriormente con algn visor de imgenes y lea el cdigo con su dispositivo. La lectura puede realizarse desde el monitor o desde alguna hoja impresa con el cdigo.
26
Aplicacin funcionando. Pgina de inicio. Contiene un botn para iniciar el escner.