| Artículos | 01 ENE 2005

Programación en teléfonos y PDAs

Tags: Histórico
Programación en Java (y V)
Ignacio Céspedes.
En esta ocasión, y como colofón a la serie de capítulos que nos han acompañado en los últimos meses, trataremos aspectos fundamentales del J2ME.

Nivel de dificultad: Bajo
Objetivo del artículo: Iniciarse en la programación con JAVA.
Herramientas necesarias: Entorno de desarrollo JAVA.

Cierto es que tratar un tema tan amplio únicamente en un capítulo puede que a algunos lectores les parezca imposible, y hemos de decir que están en lo cierto. A ellos les transmitimos que nuestra intención no es otra que mostrarles el camino y despertar en ellos inquietudes sobre el tema.
La versión Micro Edition J2ME está enfocada a la aplicación de la tecnología Java en dispositivos con capacidades computacionales y gráficas muy reducidas. Ejemplos de estos dispositivos los encontramos en los teléfonos móviles, PDA y electrodomésticos inteligentes. Para que se pueda hacer una idea de cómo se enmarca J2ME dentro de la totalidad de la arquitectura de Sun puede echar un vistazo a la Tabla 1.
La arquitectura de las aplicaciones J2ME consiste en una jerarquía de clases que van de lo más genérico y abierto a lo más especifico y concreto. Dentro de este marco se encuentran las API de J2ME, y por encima de ellas se encuentra la configuración CLDC, que no es otra cosa que un subconjunto de API para ser utilizadas en un grupo concreto de dispositivos móviles. Y por último están los perfiles MIDP, que se apoyan en las configuraciones últimas y corresponden a una serie de API concretas para un único dispositivo dentro del grupo.
Podremos decir entonces que un entorno determinado de J2ME se compone de: máquina virtual (KVM), configuración (CLDC), perfil (MIDP) y paquetes opcionales.

Herramientas necesarias
Si no dispone de ninguna aplicación de desarrollo visual puede descargarse de forma gratuita las herramientas necesarias para desarrollar aplicaciones J2ME. En primer lugar necesita un editor de texto, en este caso es válido cualquiera, los hay más completos y más sencillos pero todos son útiles.
En segundo lugar dispondremos de un compilador estándar de Java. Puede hacer uso de SDK del J2SE a su disposición en java.sun.com/products/archive/j2se-eol.html.
En tercer lugar necesitamos las API de la configuración CLDC y del perfil MIDP, que se pueden descargar de la dirección java.sun.com/j2me/download.html. Ver Figura 1.
Aparte de estas herramientas básicas existen entornos visuales de desarrollo más completos y fáciles de manejar. Entre ellos podemos destacar J2ME Wireless Toolkit 2.0, que es simplemente un emulador al que proporcionamos las clases Java y podemos ver el MIDlet en ejecución (ver Figura 2). También podemos contar con Sun One Studio Mobile Edition, que es una herramienta para la creación de MIDlets que incluye un emulador integrado.

¿Qué se entiende por MIDlet?
Hasta el momento hemos nombrado los MIDlets pero no hemos definido en qué consisten ni cuál es su estructura general. En definitiva, un MIDlet es una aplicación J2ME desarrollada sobre el perfil MID, es decir, una aplicación para dispositivos de información móviles cuyas limitaciones están dentro de la especificación MID.
Una vez que hemos definido lo que es un MIDlet, ha llegado el momento de comenzar a explicar cómo es la estructura general de uno de ellos. En la Figura 3 hemos recuadrado las distintas partes básicas de un MIDlet utilizando diversos colores para una identificación más fácil. De dicha figura podemos destacar los elementos de código comunes utilizados en todos los MIDlets.
En principio debemos importar todas las clases del paquete javax.microedition.midlet. Esto lo hacemos en la primera línea de la forma que mostramos a continuación: import java.microedition.midlet.*; así todos los MIDlet heredan de esta clase y todos presentan una misma interfaz, que permite su gestión independientemente del entorno de ejecución. Si nos fijamos en la estructura veremos que carece de función main ( ), pero debemos implementar obligatoriamente las funciones startApp( ), pauseApp( )y destroyApp( )(puede distinguirlas por colores en la figura nombrada anteriormente).
El método StartApp se ejecuta inmediatamente antes de que el MIDlet pase a estado activado. Por esta razón es el sitio ideal para que incluyamos código que prepare el MIDlet para empezar o continuar la ejecución. Hemos de tener en cuenta que este método no sólo se ejecuta al principio de la aplicación, sino que se volverá a desen­cadenar en el momento en que se produzca una interrupción y ésta la lleve a un estado de espera. Por esta razón no podrá incluir aquí inicializaciones de variables que sólo se tengan que inicializar una vez.
El método pauseApp, a diferencia del anterior, se ejecuta justo antes de que el MIDlet pase a estado de espera. Normalmente este método se suele utilizar para guardar información que sea susceptible de perderse durante la interrupción del MIDlet. Como ejemplos típicos nos podemos encontrar con puntuaciones o estados de determinados juegos.
Por último comentaremos algunos aspectos del método destroyApp, que se ejecuta justo antes de que pase al estado destruido. Las acciones habituales que se suelen ejecutar aquí son la liberación de recursos temporales, o el almacenamiento de la información que queramos conservar. Este es el único mecanismo que posee el MIDlet para pedir la finalización de la ejecución.
Además de los métodos básicos descritos anteriormente existen algunos otros que pasamos a describir en Tabla 2.

Sencilla aplicación para dispositivo móvil
Una vez explicada brevemente la estructura básica de un MIDlet pasaremos a realizar una sencilla aplicación que englobe todos los conceptos teóricos descritos hasta el momento, con sus comentarios respectivos para seguir el desarrollo con todo detalle. El programa propuesto coge un valor del fichero descriptor, lo muestra en la pantalla del dispositivo y va mandando información sobre el estado por el que va pasando.

import javax.microedition.midlet.*;
import javax.naming.lcdui.*;
public class PrimerMidlet extends MIDlet implements CommandListener{
/* Variables de interfaz de usuario para mostrar el mensaje y leer la entrada del usuario */
private Display display;
private TextBox textBox;
private Command comando;
/* Texto a mostrar en pantalla */
private String saludo= “Hola, ¿cómo estas?”;
public PrimerMidlet(){
/* leemos el mensaje del fichero descriptor */
try {
saludo=getAppProperty(“saludo”);
}Catch (NullPointerException e){
/* error al leer, se queda con el valor inicial*/
saludo= “hola, ¿cómo estas?”;
}
/* iniciamos el comando de entrada*/
comando= new Command(“Salir”,Command.EXIT,0);
/* y la ventana de salida de datos */
textBox= new TextBox(“saludo”,saludo,20,TextField.ANY);
text.Box.addCommand(comando);
text.Box.setCommandListener(this);
/* Imprimimos el estado */
System.out.prinln(“MIDlet Creado”);
}
public void startApp() throws MIDletStateChangeException{
/* Preparamos la pantalla para escribir en ella */
display=Display.getDisplay(this):
display.setCurrent(textBo

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información