Bien ahora pasemos a un pequeño tutorial de java me para móviles y posiblemente ahora se haga la pregunta ¿Y por que java me? ¿Hay otras formas de programar en móviles como con HTML 5 y php?.
Bueno con java podemos modelar un diseño de clases hacer modelos de testing, es decir poder hacer desde una aplicación sencilla hasta una compleja usando diferentes metodologías y técnicas, y si podemos hacer una pagina y que se vea en un browser pero pues al ser una pagina web se debe renderizar siempre o bien tratar de usar ajax para lo mismo, es decir lidiar con la interfase del sistema cuando en realidad deberíamos concentrarnos en el negocio, también el usar una aplicación web no es offline como una aplicación nativa, o bien tratar de usar Widgets con HTML y java script pero no es algo que se modele a raiz de una clase ahí ya es programación estructurada.
Los Widgets son pequeñas aplicaciones de web independientes que puedes instalar y usar en tu teléfono. Esas aplicaciones ofrecen las funciones específicas y frecuentemente usadas, como pronósticos del tiempo o noticias en la Internet. Para usar los Widgets, tu aparato debe tener el soporte necesario.
Las aplicaciones nativas permiten una manipulación de APIS de manera nativa y directa.
En realidad me parece que depende del objetivo de la aplicación como se puede diseñar, por ejemplo si es informativa igual y es con Html 5 o bien con un Widget, pero si es de un proceso de negocio complejo como ventas, con Gps, e imprime y cobra con tarjeta como que es mejor con algo nativo como java igual tomar en cuenta el crecimiento de la aplicación.
En resumen pueden ser de 3 tipos los desarrollos móviles y depende de el enfoque del negocio lo que deberíamos usar, posteriormente se mostraran mas información de otras tecnologías:
Algunas tecnologías móviles y herramientas comunes pueden ser:
- Java ME, Netbeans y Eclipse.
- Blackberry con Java ME y Java nativo de blackberry, Visual Studio(plugin) y Widgets.
- Iphone con cocoa y monotouch(c#).
- Android con Motodev, Eclipse y proximanente Monodroid(c#).
- Widgets java script y html con Aptana.
- Phone gap con java script, multiplataforma.
- Windows Phone con Silverlight y Expression.
- Windows Mobile(Descontinuado ahora es el Windows Phone)
Mi recomendación es siempre conocer y revisar las necesidades del cliente, crecimiento y no enfocarse en una moda o lo que nos parece que es lo más sencillo pero es muy limitado en cuanto al crecimiento a veces lo barato sale caro.
1) Tipos de Aplicaciones.
Pago único. Se hace un único pago y no hay problema de gestionar licencias.
Renta. Acá se pone énfasis en tener el control y poder gestionar las licencias y pagos cada cierto tiempo, mediante un sistema de gestión de licencias.
Patrocinio. Acá se pone énfasis en poder gestionar contenido de publicidad como puede ser imágenes o videos.
2) Características de móviles.
Uso de envío de datos a través de la red del Carrier.
Manejo de Web services.
Manejo de Web client.
Manejo de Sockets.
Uso de envío de datos a través de WiFi.
Uso del GPS.
Uso de los mapas.
Uso de la cámara.
Uso de la multimedia para reproducir video.
Uso de la multimedia para reproducir música.
Uso de la multimedia para grabar video.
Uso de la multimedia para grabar música.
Uso del envío/recepción de sms.
Uso del envío/recepción de msm.
Uso del envío/recepción de mail.
Uso del envío/recepción de pin.
Uso del teléfono para hacer una llamada o recibirla.
Almacenamiento de datos usando SQL Lite si lo permite u algun otro metodo.
Uso de periféricos externos:
Código de barra.
Impresoras.
Lector de tarjeta de cobro.
3) Java 2 ME.
J2ME es la plataforma para el desarrollo de aplicaciones móviles.
Existen dos tipos de aplicaciones en J2ME las CDLC y las MIDP
Las aplicaciones CDLC es concebido como una base para otras plataformas como MIDP. Su funcionalidad es escasa
Las aplicaciones MIDP (Mobile Information Device Profile) cuenta con una mayor funcionalidad y puede ser utilizado en prácticamente cualquier PDA
4) MIDlet.
Este paquete permite a las aplicaciones MIDP (midlets) interactuar con el entorno, sobre el cual la aplicación se está ejecutando.
Un midlet siempre heredará de la clase javax.microedition.midlet.MIDlet
Las aplicaciones MIDP deben contar con al menos un MIDlet.
5) Ciclo de vida de un midlet.
Cuando un MIDlet se termina de cargar el estado que toma es el pausado.
Ya que se inicializa el MIDlet este pasa al estado activo.
El MIDlet puede pasar del estado activo al pausado a través de sus propios métodos o que el sistema operativo lo pause para responder a una llamada.
El MIDlet puede ser destruido independientemente de su estado activo o pausado.
6) Metodos de un MIDlet.
Las clases que heredan de javax.microedition.midlet.MIDlet deben implementar los tres métodos abstractos que tiene la clase MIDlet
startApp
pauseApp
destroyApp
Estos métodos pueden ser declarados como protected o como public si van a ser llamados desde otro elemento.
7) startApp()
Este método cambia el estado del MIDlet a activo.
Definición:
protected abstract void startApp ()
Un MIDlet inicia su carga con el constructor y de no haber un error pasa al estado pausado.
Con este método se inicia la ejecución del MIDlet hasta que regrese al estado pausado o destruido.
8) pauseApp()
Cambia el estado del MIDlet a pausado
Sintaxis: protected abstract void pauseApp ()
Guarda la información del estado actual de nuestra aplicación y libera los recursos que ella pudiera estar ocupando.
Al reactivarse nuestra aplicación se llama al método startApp.
Nota: es muy recomendable que en el método startApp pueda distinguir cuando es ejecutado por primera vez, de las veces que es reanudado el sistema.
9) destroyApp()
Es el método al cual se llama cuando la aplicación debe terminar.
Sintaxis:
protected abstract void destroyApp (boolean unconditional)
Este método cambia el estado del MIDlet a destruido.
El MIDlet puede pedir que no quiere entrar en el estado Destruido lanzando una excepción MIDletStateChangeException. Lo cual evita que la aplicación no termine. Para concluir con la aplicación, ignorando cualquier excepción que se diere durante la ejecución de este método; establecemos a true el parámetro unconditional.
10) Otros metodos.
Existen otros tres métodos para el cambio de estado de un MIDlet.
El llamado a cualquiera de ellos no causa la ejecución de los métodos que anteriormente fueron descritos.
Estos métodos son:
public void notiyPaused ();
public void notiyDestroyed ();
public void resumeRequest ();
Para cambiar al estado de pausado, destruido y activo respectivamente.
11) Ejemplo de un MIDlet.
//Usamos la clase MIDlet
import javax.microedition.midlet.*;
//Nuestra clase debe de heredar de la clase MIDlet
public class MiMIDletEjemplo extends MIDlet
{
//Constructor
public Ejemplo1( )
{ }
//Método que se llama cuando pasamos de Pausado a Activo
protected void startApp( )
{ }
//Método que se llama cuando pasamos de Activo a Pausado
protected void pauseApp( )
{ }
//Método que se llama cuando se destruye el midlet
protected void destroyApp(boolean incondicional)
{ }
}
12) Display.
Representa el controlador lógico de la pantalla del dispositivo, donde el Midlet colocará su interfaz.
El objeto Display no se crea, se obtiene con el método getDisplay().
Por cada MIDlet sólo existe una instancia del objeto Display.
Sólo un MIDlet podrá tener el control de la pantalla.
El método getDisplay, generalmente, se ejecuta una vez y se guarda la referencia del objeto Display.
public static Display getDisplay (MIDlet midlet);
13) Metodos de Display.
Los métodos más usados del objeto Display son:
Displayable = getCurrent(); Retorna el objeto Displayable que actualmente se muestra en pantalla para dicha aplicación Midlet.
Display = getDisplay(MIDlet m); Obtiene la instancia del objeto Display.
Boolean = isColor(); Indica si el Display del dispositivo soporta colores.
Int = numColors(); Regresa el número de colores que el dispodivo soporta.
Void = setCurrent(Alert alert, Displayable nextDisplayable); Muestra un objeto Alert y el objeto Displayable cuando el objeto Alert desaparezca.
Void = setCurrent(Displayable nextDisplayable); Establece el objeto Displayable en el Display. Muestra el objeto Displayable en la pantalla.
Boolean = vibrate(int duration); Solicita la operación de vibrar al dispositivo.
14) Objeto Displayable.
Este tipo de objetos contiene la información que va a ser visualizada.
Exiten dos tipos de objetos Displayable
Screen – Clase base para utilizar el API de alto nivel del interfaz de usuario.
Canvas – Estructuras que pueden acceder a eventos de bajo nivel.
15) Tipos de screen.
Existen dos tipos de Screen:
Screen con estructura predefinida: Alert, List y TextBox, que encapsulan componentes de interfaz complejos y que las aplicaciones no pueden enriquecer con nuevos componentes.
Screen genérica: Form, las aplicaciones pueden llenar este tipo de pantalla con texto, imágenes u otros componentes de interfaz de usuario.
16) Objeto Alert.
Esta clase permite mostrar un mensaje (y opcionalmente una imagen) al usuario.
Es como un pop-up o un MessageDialog.
Los constructores de la clase Alert son:
public Alert(String title);
public Alert(String title, String alertText, Image alertImage, AlertType alertType);
Por defecto el tiempo que permanece un Alert en pantalla está determinado por el dispositivo o puede ser cambiado usando el método setTimeout() que especifica el tiempo en milisegundos (o usando la constante Alert.FOREVER)
17) Objeto List.
Esta clase hereda de Screen.
Con ella podemos mostrar una lista de opciones seleccionables.
Existen tres tipos de selección en un List:
EXCLUSIVE – Cada elemento de la lista cuenta con una opción de selección. Cuando el usuario selecciona un elemento, el elemento anteriormente seleccionado deja de estarlo.
MULTIPLE – Cada elemento de la lista cuenta con un cuadro de selección, el usuario puede marcar cuantos elementos desee.
IMPLICIT – Este tipo de selección es parecida a la EXCLUSIVE en el sentido que sólo un elemento puede ser seleccionado. Pero su selección es automática con tan sólo poner el foco en el elemento.
18) Constructores de List.
El objeto List cuenta con los siguientes constructores:
List(String title, int listType)
List(String title, int listType, String[] stringElements, Image[] imageElements)
El objeto List tiene un comando por defecto (SelectCommand), el cual sirve para cuando deseamos seleccionar un elemento de la lista y sólo se activa si la lista cuenta con al menos un elemento.
19) Commands.
Los commands son constructores que encapsulan la semántica de una acción.
Para crear un comando iniciamos con la declaración de una variable de tipo command
Command exitCommand;
Creamos la instancia:
exitCommand = new Command("Salir", Command.EXIT,2);
Los parámetros que se pasan al momento de crear la instancia son:
Título o etiqueta del command
Tipo del Command
Prioridad del Command
20) Tipos de Commands.
OK – Confirma una selección
CANCEL – Cancela la acción actual
BACK – Traslada al usuario a la pantalla anterior
STOP – Detiene una operación
HELP – Muestra una ayuda
SCREEN – Tipo genérico para uso del programador referente a la pantalla actual
ITEM – Tipo genérico para uso del programador referente a un elemento de la pantalla actual
21) Listener de comandos.
Para agregar un Command a un objeto Screen:
screen.addCommand(exitCommand);
Finalmente, para poner al objeto Screen a la “Escucha” de la selección de los comandos, ejecutamos el método setCommandListener.
screen.setCommandListener(this);
22) CommandListener.
Todo Screen que vaya usar Commands requiere de la implementación de la interfaz CommandListener.
public class HelloWorld extends MIDlet implements CommandListener
Al impletar dicha interfaz debemos redefinir el método commandAction.
public void commandAction(Command c, Displayable s)
{
// Salir
if (c == exitCommand)
{
destroyApp(false);
notifyDestroyed();
}
}
23) La clase Form.
La clase Form es una subclase de Screen, que contiene un número arbitrario de Items, como imágenes, texto y listas de selección.
La clase Form tiene dos constructores:
Form(String title)
Form(String title, Items[] items)
El número de Items que se encuentran contenidos en un Form se obtiene ejecutando el método size() de la forma.
24) Metodos para manejar los items de un form.
int append(Image img)
int append(Item item)
int append(String str)
void delete(int itemNum)
void insert(int itemNum, Item item)
void set(int itemNum, Item item)
Item get(int itemNum)
void deleteAll()
25) Clase Item.
Es la superclase usada por todos los componentes que pueden formar parte de un Form.
La clase Item es una clase abstracta por lo que sólo puede ser instanciada a través de sus clases derivadas.
Todos los ítem tiene un campo label o etiqueta, que es una cadena que va con el ítem.
Para ver y poner esta etiqueta tenemos dos métodos:
public void setLabel(String label)
public String get Label()