Está en la página 1de 29

1

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.

<activity
android:name="com.google.zxing.client.android.CaptureActivity"
android:clearTaskOnLaunch="true"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="landscape"
21

android:stateNotNeeded="true"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="stateAlwaysHidden" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>

<action android:name="com.google.zxing.client.android.SCAN" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

22

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
}
}
}

24

if (resultCode == RESULT_OK) {
String contenido = intent.getStringExtra("SCAN_RESULT");
Intent resultado=new Intent(this,Resultado.class);
resultado.putExtra("caracteres_leidos",contenido);
startActivity(resultado);
}

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:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_resultado);


if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new
PlaceholderFragment()).commit();
}

String carnet="carnet";
String nombre="nombre";


Bundle bundle=getIntent().getExtras();
String cadena=bundle.getString("caracteres_leidos");
StringTokenizer tokens=new StringTokenizer(cadena,":;");
int i=0;
while(tokens.hasMoreTokens()) {
String elemento=tokens.nextToken();
if(i==1){
nombre=elemento;
25

}

if(i==3){
carnet=elemento;
}

i++;
}

EditText editNombre=(EditText)findViewById(R.id.editNombre);
EditText editCarnet=(EditText)findViewById(R.id.editCarnet);

editNombre.setText(nombre);
editCarnet.setText(carnet);

}
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.

Escaneado en ejecucion desde un dispositivo.

Se muestran los resultados.
27

También podría gustarte