Vous êtes sur la page 1sur 59

Java 2 Platform Micro Edition

DESARROLLO DE APLICACIONES MVILES

Profesor: Dr. Jess Soto Carrin (jesus.soto@upsam.net)


Master de Ingeniera Web, Oviedo

Contenido de la presentacin

Conceptos J2ME. Entorno de desarrollo. Componentes visuales. Comandos. Gestin de registros RMS. Control de caractersticas J2ME

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

CARACTERSTICAS
J2ME es la versin del lenguaje JAVA para el desarrollo de aplicaciones mviles.

Se basa en conceptos de configuracin y de perfil:

CLDC (Connected Limited Device Configuration) es la configuracin general para un amplio abanico de dispositivos, que van desde PDAs a telfonos mviles y otros. MIDP (Mobile Information Device Profile) define el perfil, las APIs y caractersticas hardware y software necesarias para el caso concreto de los telfonos mviles.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

CLDC

Especificacin diseada para dispositivos con restricciones limitadas (memoria, procesador, conexin, etc..). Proporciona los aspectos bsicos para la ejecucin del lenguaje Java; es la base. Desarrollada junto con las empresas fabricantes de dispositivos wireless, proveedores de servicios y terminales de venta.

Existen 3 versiones: CLDC 1.1 CLDC 1.0 CLDC HotSpot Implementation

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

MIDP

Proporciona un perfil apoyado en el CLDC que aporta los paquetes JAVA necesarios para la ejecucin de funciones orientadas al desarrollo de aplicaciones. Versiones:

MIDP 1.0 MIDP 2.0 MIDP 2.1

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

ARQUITECTURA

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

CLASES

Por el CLDC

java.lang java.util java.io javax.microedition.midlet javax.microedition.lcdui javax.microedition.io javax.microedition.rms javax.microedition.pki javax.microedition.xml

Por MIDP

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

MIDLET

Es la aplicacin mvil JAVA gestionada por la mquina virtual. CICLO DE VIDA

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

CLASE MIDLET
package hello; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class HolaMundoMIDlet extends MIDlet implements CommandListener { private boolean midletPaused = false; public HolaMundoMIDlet() { } public void startApp() { if (midletPaused) { resumeMIDlet (); } else { initialize (); startMIDlet (); } midletPaused = false; } public void pauseApp() { midletPaused = true; } public void destroyApp(boolean unconditional) { } .... }
DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

MANIFIESTO - JAD
MIDlet-1: HelloMIDlet, ,miapp.HolaMundoMIDlet MIDlet-Icon: /icon.png MIDlet-Info-URL: www.imai-software.com MIDlet-Jar-Size: 3016 MIDlet-Jar-URL: MiprimerMIDLET.jar MIDlet-Name: MiprimerMIDLET MIDlet-Vendor: ImaI Software MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.1 MicroEdition-Profile: MIDP-2.0

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

10

ENTORNO DE DESARROLLO

NetBeans

Plugins:

Mobility Visual Mobility Designer Mobility End to End Java ME CDC

Plataforma:

Sun Java(TM) Wireless Toolkit 2.5.2

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

11

MI PRIMERA APLICACIN

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

12

ESTRUCTURA DEL PROYECTO

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

13

PROPIEDADES

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

14

FLUJO DEL MIDLET

Un MIDLET posee 3 vistas:

Flujo Indica el flujo entre los diferentes elementos visibles. Cdigo Muestra el cdigo java del MIDLET. Pantalla Muestra un elemento visual definido en el MIDLET (pantallas, mens, etc..)

Flujo de nuestra aplicacin:

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

15

IMPLEMENTACIN DEL FLUJO


public void startMIDlet() { switchDisplayable(null, getForm()); } public void switchDisplayable(Alert alert, Displayable nextDisplayable) { Display display = getDisplay(); if (alert == null) { display.setCurrent(nextDisplayable); } else { display.setCurrent(alert, nextDisplayable); } } public Display getDisplay () { return Display.getDisplay(this); } public void exitMIDlet() { switchDisplayable (null, null); destroyApp(true); notifyDestroyed(); }
DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

16

CLASE DISPLAY

Slo existe una instancia del objeto Display por MIDLET. Proporciona mtodos para la:

Gestin de los elementos visuales J2ME:

Cambio del Display

setCurrent(Display next) setCurrent(Alert a,Display next)

Obtencin de caractersticas sobre la pantalla del dispositivo: soporte color (isColor), nmero de colores (numcolors), mejor ancho/alto de imagen (getBestImageWidth/Height, vibracin (vibration) etc..)

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

17

FORMULARIO
stringItem

Comando - Exit

Contenedor - Formulario

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

18

ELEMENTOS

Cadena (StringItem)
private StringItem stringItem; public StringItem getStringItem() { if (stringItem == null) { stringItem = new StringItem("Mensaje:", "Hola Mundo!"); } return stringItem; }

Comando (Exit)
private Command exitCommand; public Command getExitCommand() { if (exitCommand == null) { exitCommand = new Command("Exit", Command.EXIT, 0); } return exitCommand; }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

19

CONSTRUCCIN DEL FORMULARIO


private Form form; public Form getForm() { if (form == null) { form = new Form("Mi primer MIDLET", new Item[] { getStringItem() }); form.addCommand(getExitCommand()); form.setCommandListener(this); } return form; } public void startMIDlet() { switchDisplayable(null, getForm()); }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

20

Interfaz CommandListener
public void commandAction(Command command, Displayable displayable) { // write pre-action user code here if (displayable == form) { if (command == exitCommand) { // write pre-action user code here exitMIDlet(); // write post-action user code here } } else if (displayable == pantallaxx) { if (command == algnComando) { // write pre-action user code here accinx() // write post-action user code here } } // write post-action user code here }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

21

RESULTADO

Exit Command

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

22

Elementos Displayables

Alert: mensaje de aviso. Form: elemento formulario. List: men tipo lista. Login Screen: pantalla de inicio de sesin. Wait Screen: aviso de espera. PIM Browser: buscador agenda / calendario / lista de tareas. Text Box: caja de texto Splash Screen: pantalla inicial de la aplicacin File browser: localizador de archivos. SMS Composer: formulario de envo de mensajes cortos SMS.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

23

Ejemplo Splash Screen

Se puede especificar un TimeOut. Cuando el tiempo indicado ha terminado se ejecuta el comando DISMISS_COMMAND. En general este comando muestra el formulario de inicio. La pantalla de presentacin inmediata suele contener un recurso tipo imagen y un texto asociado.
import org.netbeans.microedition.lcdui.SplashScreen; public class MiprimerMIDLET .... { private SplashScreen splashScreen; }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

24

Cdigo Splash Screen


public Image getImage() { if (image == null) { try { image = Image.createImage("/img.jpg"); } catch (java.io.IOException e) { e.printStackTrace(); } } return image; } public SplashScreen getSplashScreen() { if (splashScreen == null) { // write pre-init user code here splashScreen = new SplashScreen(getDisplay()); splashScreen.setTitle("MI PRIMERA APLICACI\u00D3N J2ME"); splashScreen.setCommandListener(this); splashScreen.setImage(getImage()); splashScreen.setText("MI PRIMER MIDLET"); // write post-init user code here } return splashScreen; }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

25

Elemento ALERT

Las alertas son utilizadas para informar sobre el estado de la ejecucin de determinadas operaciones.

Son como los cuadros de dilogo en las aplicaciones de escritorio.


Pueden tener establecido un TIMEOUT

Se puede establecer un indicador de actividad.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

26

Cdigo - Alert
private Alert alert; public Alert getAlert() { if (alert == null) { alert = new Alert("alert", "MENSAJE DE ALERTA", getImgAlerta(), AlertType.ALARM); alert.setTimeout(Alert.FOREVER); } return alert; } public void commandAction(Command command, Displayable displayable) { if (displayable == form) { if (command == exitCommand) { exitMIDlet(); } else if (command == okCommand) { switchDisplayable(getAlert(), getForm()); } } else if ... }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

27

Resultado

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

28

Elemento LIST

Tipos:

IMPLICIT: utilizadas para la construccin de mens, ejecuta un comando (SELECT_COMMAND) cuando un usuario selecciona un elemento. EXCLUSIVE:

MULTIPLE:

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

29

Ejemplo: LISTA - IMPLICIT

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

30

Cdigo: Opciones Men - LISTA


private List menu; public List getMenu() { if (menu == null) { menu = new List("list", Choice.IMPLICIT); menu.append("MSJ HOLA", null); menu.append("NUEVO CLIENTE", null); menu.append("VER CLIENTES", null); menu.setCommandListener(this); menu.setSelectedFlags(new boolean[] { false, false, false }); } return menu; } public void menuAction() { String __selectedString = getMenu().getString(getMenu().getSelectedIndex()); if (__selectedString != null) { if (__selectedString.equals("MSJ HOLA")) { switchDisplayable(null, getForm()); } else if (__selectedString.equals("NUEVO CLIENTE")) { switchDisplayable(null, getFrmCliente()); } else if (__selectedString.equals("VER CLIENTES")) { switchDisplayable(null, getFrmVerClientes()); } } }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

31

LISTA - Otros mtodos (I)

getSelectedIndex() : recupera el ndice del elemento seleccionado. deleteAll(): borra todos los elementos de la lista. delete(int index): borra el elemento que se encuentra en el ndice especificado. insert(int index,String str, Image img): inserta un elemento en la lista en el ndice indicado (index). append(String str, Image img): aade al final de la lista el elemento indicado. Las imgenes son opcionales, utilizar null para su omisin en los mtodos.
32

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

LISTA - Otros mtodos (II)

getSelectedFlags(boolean[] arg): devuelve el nmero de elementos seleccionados junto con un array de flags que indica el estado de cada elemento. isSelected(int index): indica si un elemento est seleccionado o no. size(): devuelve el nmero de elementos de la lista. setTitle(String title): establece el nombre de la lista.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

33

Formularios Elemento FORM

Permiten crear interfaces de entrada de datos utilizando los siguientes componentes visuales:
Text Field: Campo caja de texto. Es posible asociar restricciones: Telfono, e-mail, URL, valores numricos, password, etc... Date Field: Campo fecha, incluye mecanismos que facilitan la entrada de este tipo de datos.

Gauge: barra de progreso.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

34

TextField

Propiedades:

Text: Texto. Maximum Size: Tamao mximo admisible. Input Constraints

Mtodos:

getString(): devuelve el contenido escrito por el usuario en la caja de texto. getMaxSize(): devuelve el tamao mximo permitido.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

35

Date Field / Gauge

Date Field:

Propiedades:

Input Mode: DATE / TIME / DATE_TIME Time Zone: especifica la zona horaria. Ej: Europe /Madrid

Mtodos:

getDate(): devuelve la fecha introducida.

Gauge:

Propiedades:

Max Value: lmite del mximo valor admitido por la barra de progreso. Value: valor de la barra de progreso.

Mtodos:

set / getValue(int v): establece el valor de la barra de progreso. setMaxValue(int v): establece el lmite mximo de la barra de progreso.
36

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

Formularios Controles (II)

ChoiceGroup: Listas

EXCLUSIVE

MULTIPLE

POP-UP (ComboBox)

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

37

Propiedades / Mtodos - Listas

ChoiceGroup

Propiedades:

Type: EXCLUSIVE / MULTIPLE / POPUP Label: Etiqueta asociada.

Mtodos:

getSelectedIndex(): recupera el ndice del elemento seleccionado. getSelectedFlags(boolean[] flags): devuelve el nmero de elementos seleccionados y un array con el estado de cada uno de ellos. getString(int index): devuelve el nombre del elemento ubicado en la posicin index. size(): devuelve el tamao de la lista. Modificacin de elementos: mtodos similares al control Displayable LIST delete / deleteAll / insert / append

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

38

Formularios Controles visibles

Image Item: imagen. Spacer: espacio de separacin. String Item: etiqueta. Table Item: tabla

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

39

Comandos generales

BACK: Volver a la pantalla anterior. EXIT: Salir de la aplicacin. CANCEL: Cancelar operacin. OK: Comando de conformidad. HELP: Comando de ayuda. STOP: Comando de parada de operacin. SCREEN: Comando general aplicable a un elemento Displayable. ITEM: Comando asociado a un control visual de un formulario.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

40

Comandos asociados - ItemCommand

Cada control puede tener asociado uno o varios comandos durante su activacin. Este tipo de asociacin se realiza a travs del comando ITEM_COMMAND
public void commandAction(Command command, Item item) { if (item == lstElementos) { if (command == comandoBorrarElementoLista) { } } else if (item == txtTexto) { if (command == comandoBuscar) { } else if (command == comandoEnviar) { } else if (command == comandoInsertarElementoLista) { insertarElemento(); } } }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

41

Invocacin de cdigo - ItemCommand

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

42

Control de flujo en acciones de invocacin

Elementos tipo flujo:

Entry Point: Llamada a un mtodo. If: Accin condicional Call Point: Llamada de ejecucin de una seccin de cdigo. List Action: cdigo asociado a un elemento de una lista. Switch: seleccin basada en una serie de casos.

Switch Case: Componente del elemento Switch.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

43

Ejercicio Crear un formulario

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

44

Cdigo - Formulario
public Form getFrmCliente() { if (frmCliente == null) { frmCliente = new Form("NUEVO CLIENTE", new Item[] { getTxtNombre(), getTxtApellidos(), getTxtTelefono(), getFecha(), getSpacer(), getSexo(), getChoiceGroup(), getSpacer1(), getImageItem(), getStringItem1(), getSpacer2(), getTableItem()}); frmCliente.addCommand(getBackCommand1()); frmCliente.setCommandListener(this); } return frmCliente; }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

45

Ejercicio Formulario & Comandos

Crear un formulario con 1 caja de texto y una lista de tipo POPUP. Incluir 1 comando de insercin asociado a la caja de texto.

Cuando un usuario seleccione el comando, el contenido de la caja de texto ha de incluirse como un nuevo elemento al final de la lista. Si la cadena introducida en la caja de texto existe, el control avisa con un mensaje de informacin sobre la situacin. Cuando un usuario seleccione el comando, el elemento elegido de la lista ha de eliminarse.
46

Incluir 1 comando de borrado asociado a la lista.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

Pantalla tipo Wait Screen

Pantalla utilizada para indicar al usuario de forma activa sobre la ejecucin de una tarea larga. Dos comandos: SUCCESS_COMMAND / FAILURE_COMMAND

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

47

WAIT SCREEN - Tareas


public SimpleCancellableTask getTask() { if (task == null) { // write pre-init user code here task = new SimpleCancellableTask(); task.setExecutable(new org.netbeans.microedition.util.Executable() { public void execute() throws Exception { // write task-execution user code here Random rnd=new Random(); int x=rnd.nextInt(100); if (x>10){ System.out.println("HOLA"); }else{ System.out.println("Fallo provocado."); throw (new Exception()); } } }); // write post-init user code here } return task; }
DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

48

Pantalla Envo SMS

Formulario creado para el envo de SMS. Sobre la mquina virtual se han de conceder los permisos para el envo de SMS.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

49

Pantalla Explorador de Ficheros

Permite seleccionar un fichero del sistema de almacenamiento del mvil. Mtodos:

getSelectedFile()

Devuelve una conexin con el fichero (FileConnection)

GetSelectedFileURL()

Devuelve el localizador del fichero.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

50

Pantalla - LOGIN

Formulario genrico utilizado para el acceso a un sistema remoto. Ej. escenario de autentificacin de sesin para la ejecucin de operaciones remotas contra un servidor. Mtodos importantes:

getPassword() getUserName()

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

51

Record Management Store (RMS)

Librera utilizada para gestionar registros en la plataforma J2ME. Proporciona los mecanismos bsicos de gestin para:

Creacin de almacenes de datos. Operaciones sobre registros de datos:

Insercin. Extraccin y modificacin. Eliminacin.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

52

Creacin de un almacn
import javax.microedition.rms.RecordEnumeration; import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException; import javax.microedition.rms.RecordStoreNotOpenException; RecordStore rs = null; try { rs = RecordStore.openRecordStore( "myrs", true ); } catch( RecordStoreException e ){ // error en apertura o creacin }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

53

Insercin de un registro
Cliente c=new Cliente(txtNombre.getString(), txtApellidos.getString()); byte[] cbytes=c.serialize(); try { rs.addRecord(cbytes,0,cbytes.length); rs.closeRecordStore(); } catch (RecordStoreNotOpenException ex) { ex.printStackTrace(); } catch (RecordStoreException ex) { ex.printStackTrace(); }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

54

Eliminacin de un registro
public void listClientesAction() {

String __selectedString = getListClientes().getString(getListClientes().getSelectedIndex()) int index=this.getListClientes().getSelectedIndex(); int p=__selectedString.lastIndexOf('.'); int rsindex=Integer.parseInt(__selectedString.substring(0,p)); this.getListClientes().delete(index); RecordStore rs = null; try { rs = RecordStore.openRecordStore( "myrs", true ); rs.deleteRecord(rsindex); rs.closeRecordStore(); } catch( RecordStoreException e ){ // error. } }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

55

Lectura de un almacn
try { int i; RecordEnumeration re=rs.enumerateRecords(null,null,false); while (re.hasNextElement()) { try{ i=re.nextRecordId(); int size = rs.getRecordSize( i ); if( data == null || data.length < size ){ data = new byte[size]; } rs.getRecord(i,data,0); Cliente c=new Cliente(data); getListClientes().append(i + "." + c.getNombre() + " " + c.getApellidos(),null); }catch(Exception recordException){ recordException.printStackTrace(); } } } catch (Exception ex) { ex.printStackTrace(); }
DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

56

Operaciones de serializacin (bytes)


public byte[] serialize(){ byte[] _bapellidos=this.apellidos.getBytes(); byte[] _bnombre=this.nombre.getBytes(); byte[] record=new byte[2+_bnombre.length+_bapellidos.length]; Integer x1=new Integer(this.nombre.length()); Integer x2=new Integer(this.apellidos.length()); record[0]=x1.byteValue(); record[1]=x2.byteValue(); for (int i=2;i<x1.intValue()+2;i++){ record[i]=_bnombre[i-2]; } int index=0; for (int i=0;i<_bapellidos.length;i++){ index=i+x1.intValue()+2; record[index]=_bapellidos[i]; } return record; }

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

57

Operacin de des-serializacin (bytes)


public void deserialize(byte[] data){ int x1=data[0]; int x2=data[1]; this.nombre=new String(data,2,x1); this.apellidos=new String(data,2+x1,x2); }

Tamao C1

Tamao C2

[NOMBRE]

[APELLIDOS]

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

58

Gestin de permisos

Necesarios para ejecutar determinadas operaciones. Ver anexo.

DESARROLLO DE APLICACIONES J2ME 2008 Jess Soto Carrin.

59

Vous aimerez peut-être aussi