Desarrollo de Aplicaciones móviles con J2ME Parte II

diciembre 29, 2009 at 12:03 am Deja un comentario

En el articulo anterior tratamos los aspectos generales para el iniciarnos en la programación de dispositivos móviles a través de J2ME, este articulo pretende adentranos en unos conceptos un poco mas avanzados, trataremos el uso de varios objectos que vienen en MIDP y CLDC que son de bastante ayuda a la hora de realizar nuestra aplicaciones.

En la figura anterior vemos la jerarquia de objetos de J2ME para la programación de interfaces gráficas, J2ME las clasifica en dos grupos las API de alto nivel con las que podemos agregar a nuestras aplicaciones botones de comando, listas, imagenes, textos, estas API’s son utilizadas para aplicaciones de negocios, el otro grupo son las API’s de bajo nivel utilizadas basicamente para desarrollar juegos (Games) para dispositivos moviles, con estas API’s se controlan las pulsaciones de las teclas del dispositivo, un mayor control de la pantalla.

Iniciaremos viendo las API’s de alto nivel, todas estas implementaciones se encuentran en el paquete javax.microedition.lcdui

Clase Display

Esta clase es el manejador de la pantalla y los dispositivos de entrada, todo MIDlet debe tener al menos un objecto Display, se encargar de mostrar los objectos heredados de Displayed que queramos en la pantalla.  De los metodos mas usados de esta clase se encuentran:

void setCurrent(Displayable d) Establece la pantalla actual.

void setCurrent(Alert a, Displayable d) Muestra la alerta a y luego establece la pantalla d como actual.

void setCurrent(Item item) Muestra el objecto item como pantalla actual.

Displayable getCurrent() Devuelve la pantalla actual

boolean vibrate(int duracion) realiza la operación de vibrado del dispositivo un tiempo determinado.

Come he comentado todo MIDlet debe contener al menos un objeto Display, esta declaracion la debemos hacer en el constructor de la clase:

Display pantalla = Display.getDisplay(this)

Una vez se obtiene la referencia al objeto Display que corresponde a la pantalla del dispositivo ya podemos crear cualquier elemento visible, es decir, una instancia de un objeto Displayable, y pasarlo a la pantalla a través del método setCurrent().  Veamos un ejemplo sencillo:

import javax.microedition.midlet.*
import javax.microedition.lcdui.*
public class Ejemplo1 extends MIDlet{
Display pantalla;  // se declara aquí para que todos los métodos puedan acceder a ella

public Ejemplo1{ // Constructor
pantalla = Display.getDisplay(this);  // Se instancia el objeto Display
}

public startApp{
if (pantalla == null) {
pantalla.setCurrent(Displayable d);
// d debe ser un objeto que derive de la clase Displayable (Form, Text, Alert,List)

}

}
public pauseApp{

}
public destroyApp{

}
}

Clase Displayable

Esta es una clase abstracta que representa las diferentes pantallas de nuestra aplicación. Como mencionamos cada objeto Display puede tener tantos objetos display como sean necesarios (Form, List, Alert…).  Mediante los metodos getCurrent() y setCurrent()  se controla que pantalla es visible y accesible.

Otros metodos que implementa esta clase están:

void addCommand(Command cmd):  Añade un comando a la pantalla.

void removeCommand(Command cmd):  Elimina el comando cmd de la pantalla.

void setCommandListener(CommandListener l):  Establece un listener para la captura de eventos.

Una vez conocidas las clases Display y Displayable con las cuales tenemos control de la pantalla del dispositivo pasaremos a conocer los objetos que mostrar en ésta.

Las clases Command y CommandListener

Una de las ventajas que tiene J2ME es el uso de botones de comandos, para agregarlos hacemos uso del objeto Command el cual recibe tres parametros:

1. Etiqueta: Es  la cadena de texto que se mostrará en la pantalla del dispositivo

2. Tipo: Indica el tipo de objeto Command que deseamos crear, los tipos que se pueden crear son:

BACK: Petición para regresar a la pantalla anterior

CANCEL:  Petición para cancelar el proceso en curso

EXIT: Petición para salir de la aplicación.

HELP: Petición para mostrar información de ayuda.

ITEM: Petición para introducir un Comando en el item de una pantalla

OK: Aceptación de una acción por parte del Usuario.

SCREEN: Acciones de propósito general.

STOP: Petición para parar una operación.

Esta parametro no quiere decir que va a ejecutar la acción que se describe, éste es para que el dispositivo lo identifique y le de la apariencia y posición al comando igual que las demas aplicaciones.

3. Prioridad: Este parametro le indica al dispositivo el orden en que se muestran los comandos en la pantalla del dispositivo.

Para declarar un objeto Command utilizamos:

Command cmdExit = new Command(“Salir”, Command.EXIT,1);

Para agregar un objeto Command en la pantalla utilizamos:

pantalla.addCommand(cmdExit);

Para que nuestro MIDlet escuche peticiones de los comando debemos implementar la clase CommandListener, esto lo hacemos en la declaración de la clase de nuestro MIDlet:

public class Ejemplo1 extends MIDlet implements CommandListener

Una vez implementada la clase CommandListener debemos hacer uso del método CommandAction que es el captura la selección de algún botón en la pantalla:

public void commandAction(Command c, Displayable d)

Donde c es el comando que se seleccionó y d el objeto Displayed donde está el comando seleccionado.

A continuación vamos a ver un ejemplo de la forma de utilizar las objetos Command:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Ejemplo2 extends MIDlet implements CommandListener {

// Declaramos los objetos Command aquí para que puedan accederse desde cualquier metodo de la clase.
private Command cmdExit;
private Command cmdHelp;
private Command cmdBack;
private Display display;

public Ejemplo2 () {  // Constructor de la clase
display = Display.getDisplay(this); // Obtenemos el dispostivo de la pantalla

}

public void startApp() {
Form formulario = new Form(“Ejemplo2″);
cmdExit = new Command(“Salir”, Command.EXIT, 1);  // declaramos los objetos de tipo Command
cmdHelp = new Command(“Ayuda”, Command.HELP, 2);
cmdBack = new Command(“Atras”, Command.BACK, 3);
formulario.append(“Bienvenidos al Blog de Aimer”);
formulario.addCommand(cmdExit);  // Agregamos los objetos Command
formulario.addCommand(cmdHelp);
formulario.addCommand(cmdBack);
formulario.setCommandListener(this);  // Activa el manejador de eventos de tipo CommandListener
display.setCurrent(formulario);
}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}
// Metodo de la clase CommandListener
public void commandAction(Command c, Displayable d) {
if (c == cmdExit) {
destroyApp(true);
notifyDestroyed();
}else if (c == cmdHelp) {
Alert mensaje1 = new Alert(“Alerta”,”Has presionado el boton cmdHelp”,null,AlertType.INFO);
display.setCurrent(mensaje1,d);  // Muestra un mensaje de pantalla

}else if (c == cmdBack) {
Alert mensaje2 = new Alert(“Alerta”,”Has presionado el boton cmdBack”,null,AlertType.INFO);
display.setCurrent(mensaje2,d);  // Muestra un mensaje en pantalla
}
}

}

Espero les sirva de ayuda este articulo.  Gracias.

Entrada archivada en:Programación Móvil. Etiquetas:, , , , .

Desarrollo de Aplicaciones móviles con J2ME Parte I

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Trackback este articulo  |  Suscríbete a los comentarios vía RSS Feed


Calendario

diciembre 2009
L M X J V S D
« nov    
 123456
78910111213
14151617181920
21222324252627
28293031  

Mensajes recientes


Seguir

Get every new post delivered to your Inbox.