6.3.-
Programación en Android: Añadiendo un registro –
Log
En este capítulo añadiremos
un log a nuestra aplicación. Esto ya lo habíamos
realizado anteriormente en otro capítulo, así que nos
será fácil añadirlo.
Comenzaremos a darle forma a nuestra
ActividadSplash, a la vez que iremos añadiendo
unas modificaciones a la clase ActividadGlobal para
ayudarnos posteriormente a hacer una depuración de nuestro
programa.
Bien, comencemos modificando la
clase ActividadGlobal. Vamos a añadirle
un par de variables tipo String, una va a
contener una cadena de texto (String) que será
la etiqueta (TAG) que utilizaremos para dar los
mensajes de depuración, y otra será para el archivo
dónde guardaremos las preferencias del juego, además
añadiremos una variable booleana, que tomará su
valor de lo que hayamos indicado en el archivo androidmanifest.xml
para la etiqueta "debuggable", así si
cambiamos la etiqueta automáticamente nos cambiará esta
variable.
Esto lo hacemos así ya que
cuando enviemos los mensajes de log, lo haremos
de forma condicional al valor de esta variable, con lo cual podemos
añadir todos los mensajes que queramos, que cuando vayamos a
publicar nuestra aplicación, simplemente cambiando la etiqueta
debuggable ya no nos incorporará esos logs.
Además tal como funciona java, al meter la salida del log
dentro de un if, si el compilador de Java evalúa
que eso va a ser siempre falso, entonces no lo incluye
en el código. Es una forma de hacer la compilación
condicional que hay en C++.
Estas son las variables que yo he
creado:
//
Etiqueta para archivo Log
protected
static
final
String
LOG_GLOBAL
= "CorrectoIncorrecto";
protected
static
final
String
PREFERENCIAS_JUEGO
= "correctoincorrecto.prefs";
protected
static
boolean
VALOR_DEBUG;
//FIXME:
En caso de publicar ponemos finalmente:
//protected
static final boolean VALOR_DEBUG=false;
|
Nota: Esto
nos va a servir de forma temporal, ya que para asegurarnos, en el
caso final de publicar nuestra aplicación, en el código
no cogeríamos este valor de lo que hay en el manifest,
definiríamos la variable como final y le asignaríamos
el valor false. Así nos aseguramos de que queda constante.
También podemos utilizar un plug-in para eclipse ("antenna"
o "eclipseme"), que permite utilizar las directivas del
pre-procesador al estilo C. (java no tiene pre-procesador) y que
sería la forma más adecuada de implementar el código
condicional. (Esto necesitaría un capítulo en
profundidad)
Y ahora implementaremos el método
onCreate(), para ello recordamos que pulsamos sobre la clase
con el botón derecho y en el menú contextual vamos a
Código Fuente->Alterar temporalmente/Implementar
métodos y ahí
elegimos para Activity el método onCreate();
Cuando lo tengamos
añadido, añadimos la siguiente línea de código,
de forma que el método nos quede así:
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
/**
* FIXME
* Esto se podría sacar en la versión FINAL
*/
VALOR_DEBUG
= (0 != (getApplicationInfo().flags
& ApplicationInfo.FLAG_DEBUGGABLE));
}
|
En esta línea accedemos a las
banderas (getApplicationInfo().flags)
dónde están almacenados varios valores además
del que buscamos, y realizamos un AND lógico con
ApplicationInfo.FLAG_DEBUGGABLE
que indica cuál es el bit que nos da el valor de debug (el bit
2). Recordamos que al hacer un AND,
sólo nos devuelve uno
en las posiciones en las que los dos valores tengan uno.
En este caso hacemos una máscara con
ApplicationInfo.FLAG_DEBUGGABLE
que sólo tiene un bit activado. El valor que nos devuelve lo
asignamos a VALOR_DEBUG,
utilizando un "pequeño truco" para convertirlo en
boolean (el 0!=), ya que las otras variables son ints.
Al
hacer esto, nos aseguramos de que se inicializa la variable, ya que
todas las demás actividades llaman al método
super.onCreate();
con lo que llaman a éste ya que están derivadas de esta
clase.
Esto
que acabamos de hacer, lo podríamos haber implementado de
otras múltiples formas, como un método static en la
clase ActividadGlobal (al hacerlo static no hay que
ejemplarizarlo para poder acceder a dicho método), y desde ese
método dar la salida de debug, etc.
Bien,
ahora cuando queramos añadir un mensaje al log, ponemos
la siguiente línea de código, cambiando el mensaje
claro:
if
(VALOR_DEBUG
== true)
Log.v(LOG_GLOBAL,
"En
Actividad Splash");
//
o simplemente:
if
(VALOR_DEBUG)
Log.v(LOG_GLOBAL,
"En
Actividad Splash");
|
Más adelante haré una
ampliación de este capítulo, en la que explicaré
como utilizar los plugins para permitir a Eclipse el pre-procesado y
el compilado condicional.
Hacer constar, que aunque leyendo
por muchos foros hay mucha gente que no le gusta el compilado
condicional, pero es una herramienta que bien usada nos evita tener
que mantener proyectos paralelos. Por ejemplo, en el caso de tener
un programa que varíe según estemos registrados o no.
Con el compilado condicional podríamos incluir en un mismo
fichero el código para la versión registrada y otro
para la versión "demo", y mediante la compilación
condicional generar un ejecutable o otro.
Ver. 1.0 – Revisión
2.2.2012
No hay comentarios:
Publicar un comentario