Escrito por Lucas Ansalone
Cómo programar celulares con J2ME?
Antes de preguntar como vamos a ver que es J2ME y MIDP que es con lo que vamos a trabajar de ahora en adelante.
J2ME significa Java 2 Micro Edition, que es la versión para dispositivos móviles como pueden ser telefónos celulares, PDAs, pocket PC, etc. Estos dispositivos no disponene de una gran potencia y poseen un nivel muy bajo de cálculo y debido a esto es que se ha creado J2ME.
La configuración que existe para estos equipos es la CDLC en inglés: Connected Limited Devices Configuration. Es el conjunto de clases esenciales para desarrollar una aplicación.
Requisitos mínimos de la CDLC
- 160k de memoria disponible para JAVA
- Bajo consumo de batería
- 16 Bits de procesador
- Conexión a red
Se utiliza para:
128kb de memoria no vólatil para la Java Virtual Machine o la máquina virtual de JAVA, y para las librerías de API del CLDC
32kb para el Runtime System.
Los MIDlets
Las aplicaciones que sean desarrolladas con MIDP son denominadas MIDlets. Estas clases MIDlets son almacenadas en bytecodes java en un fichero class.-
Las clases deben ser verificadas antes para que se garantice que no realicen ninguna operación no permitida y es algo que se debe hacer debido a las limitaciones de la máquina virtual de JAVA de los dispositivos.
Los archivos jar estarán comprendidos por:
- Clases del MIDlet
- Clases de soporte
- Recursos como ser imágenes, etc.
- Manifiesto (archivo .mf)
- Descriptor (archivo .jad)
Un archivo jar puede contener varios MIDlets los cuales se llamarán MIDlets Suite
Comenzando a programar
Todos los MIDlets heredan de la clase: javax.microedition.midlet.MIDlet la cual se encuentra en el API MIDP estándar, debemos tener en cuenta los siguientes métodos de esta clase:
- startApp (es el que lanza el MIDlet)
- pauseApp (Pausa el MIDlet)
- destroyApp (Destruye el MIDlet)
Los MIDlet disponen de tres ciclos de vida, obviamente son los que se han nombrado anteriormente:
ACTIVO
PARADO
DESTRUIDO
Casi todos los MIDlets implementan el método commandAction()
Algo a tener en cuenta dentro de JAVA es que es CASE SENSITIVE, es decir que es sensitivo a las mayúsculas y minusculas, por lo que en el código se debe escribir tal cual mostramos aquí.
El commandAction() es un método de respuesta a eventos, el cual se encuentra definido en la clase: javax.microedition.lcdui.CommandListener.
Más adelante veremos como realizar nuestro primer programa y hacerlo funcionar mediante NetBeans y muchas cosas más!!!!.
Características de los dispositivos
En este cuadro veremos las características de varios dispositivos móviles:
| Marca - Serie |
Equipo |
Tamaño Pantalla |
Resolución Colores |
| Nokia serie 30 |
3585 |
96x65 |
2 Bits |
| Nokia serie 40 |
3595,6010 |
96x65 |
12 Bits |
| Nokia serie 60 |
3650, N-Gage |
128x128 |
12 Bits |
| Nokia serie 80 |
9500 |
640x200 |
16 Bits |
| Nokia serie 90 |
7700 |
640x320 |
16 Bits |
| Motorola serie V |
v300, v600 |
176x220 |
16 Bits |
| Sony Ericsson P |
T100, T200 |
101x67 |
2 Bits (Grises) |
| Palm m Zire |
v, m100, m500 |
160x160 |
4 Bits (Grises) |
| Pocket PC |
HP Ipaq |
240x320 |
16 Bits |
La memoria de la que disponen los dispositivos móviles para almacenar juegos y apps rondan desde 400kb en equipos más viejos y 5MB en los más nuevos.
La SIM Card
Los telefónos con tecnología GSM poseen aparte de la memoria interna una llamada SIM Card o conocida como chip. Esta tarjeta posee los datos de la línea y se puede cambiar de equipo facilmente conservando el nro y la agenda.
La SIM Card posee por lo general 64kb.
Conociendo el código
Para comenzar a conocer el código de J2ME la siguiente clase nos mostrará como trabaja este lenguaje:
Public class <Clase> {
Private <tipo> <variable>;
Public <tipo> <metodo> (<tipo> <parametro>) {
<instrucciones>
}
}
La estructura de apertura y de cierre es similar a C o C++ por lo que para abrir utilizaremos { y para cerrar }
Tipos de datos:
| TIPO |
Descripción |
| Long |
Entero con signo de 64 Bits |
| Short |
Entero con signo de 16 Bits |
| Int |
Entero con signo de 32 Bits |
| Byte |
Entero con signo de 8 Bits |
| char |
Carácter |
| boolean |
Valor lógico (True o False) |
Sentencias de Control
Disponemos de dos sentencias, si sos programador C seguramente las concocerás:
IF
SWITCH (deciciones múltiples)
Veremos un ejemplo del uso del IF:
if (nro >= 500) {
return "Nro mayor"
} else {
return "Nro bajo"23
}
Ahora mostramos un ejemplo para el manejo del SWITCH
switch (hacer) {
case 0:
salir();
break;
case 1:
Comenzar();
break;
case 2:
Ayuda();
break;
default:
Error();
}
Uso de Ciclos
En este oportunidad te mostraremos el uso de ciclos mediante WHILE, este ciclo nos permite realizar instrucciones mientras se cumpla una condición.
Uso del FOR
El FOR se utiliza de la siguiente manera:
For (int i=0; i<100; i++) {
Valor[] = 0;
}
A tener en cuenta:
Los archivos en J2ME deben coincidir con el nombre de la clase, puesto que se trabaja con archivos con código de clases y cada clase es escrita en un archivo diferente.
Antes de comenzar a trabajar necesitamos J2ME SDK que se puede descargar desde AQUÍ además del Wireless Toolkit el cuál se puede descargar gratis desde ACÁ
Tenés problemas para descargar o no los encontrás?, puedes preguntar en nuetro foro y te orientaremos!
Crear la aplicación
Para desarrollar nuestra aplicación utilizaremos NetBeans (se debe introducir un e-mail válido para comenzar la descarga) que es uno de los IDE más populares y sencillos de utilizar.
También es necesaria la máquina virtual de Java, se descarga desde AQUÍ
Antes que nada necesitaremos descargar los módulos para poder desarrollar nuestra aplicación, desde NetBeans seguimos estos pasos:
1 Tools - Update Center
2 - Seleccionar "Check The Web for Available Updates" y hacer click en NEXT
3 - Dentro de las opciones mostradas debemos seleccionar "J2ME Wireless" y usar la opción ADD, luego hacer click en NEXT.
4 -Una vez descargado el módulo hacer click en FINISH para finalizar.
Estructura del código
Aquí mostramos como es la estructura del código de J2ME:
import javax.microedition.Midlet.Midlet;
public class Name extends Midlet {
public void startApp() {
}
public void pauseApp() {
}
public void destroyApp (boolean unconditional) {
}
}
Explicaremos que significa cada parte del código mostrado, la primer línea indica al compilador que clases se utilizarán en el programa, luego debemos especificar el nombre de la clase, en este caso será Name, pero podría ser cualquiera.
Escribiendo "Hola mundo" en el telefóno.
A continuación veremos el código para escribir "Hola mundo" en el móvil, quizás parezca demasiado código para una sola frase pero se verá luego que no es tan así.
Holamundo.java
import javax.microedition.Midlet.*;
import javax.microedition.lcdui.*;
public class Holamundo extends Midlet implements CommandListener {
private Form formulario;
public void startApp() {
formulario = new Form("Primer Programa");
formulario.append("Hola Mundo!");
formulario.addCommand(new Command("Salir", Command.EXIT, 1));
formulario.setCommandListener(this);
Display pantalla = Display.getDisplay(this);
pantalla.setCurrent(formulario);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
formulario = null;
}
public void commandAction(Command c, Displayable d)
{
destroyApp(true);
notifyDestroyed();
}
}
Ahora sólo queda probarlo y ver que resultado dá. El resultado debe ser algo como esto: