Dando un'occhiata alla figura 1 vediamo che j2me funziona con due diverse configurazioni (CDC e CDLC) che differiscono per le potenzialità che l'apparecchio offre. Per quanto riguarda i profili che che troviamo su apparecchi mobili come cellulari e smartphone dell'ultima generazione (ovvero profili MIDP), con l'uscita della MIDP 2.0 e di parecchi optional package, ovvero package che non fanno parte della release del profilo e che sono stati proposti e sviluppati da aziende come Nokia, Motorola, Siemens etc etc, le potenzialità di sviluppo su questi dispositivi incominciano a farsi davvero interessanti. Nelle prime versioni MIDP il controllo che una MIDLET j2me poteva avere sul dispositivo era ben poco ed erano soprattutto sviluppati i package relativi alla grafica (chi non ha mai visto un gioco JAVA su cellulare!). Adesso invece la situazione comincia a farsi più interessante perché piano piano vengono abilitate sempre più funzioni a cui j2me può accedere.
Figura 1
J2ME (Java 2 Micro Edition):
Edizione del linguaggio Java abilitato a funzionare su dispositivi piccoli (con
una VM diversa da quella di J2SE e quindi con funzionalità ridotte).
CDC (Connected Device Configuration) e CLDC (Connected Device Limited
Configuration):
Configurazioni di cui dispongono certi dispositivi, come
capacità computazionale, dotazioni di memoria, tipologia e dimensioni dei
display, connessioni a reti di TLC. Chiaramente la configurazione "Limited"
riguarda appunto dispositivi con limitate risorse.
MIDP (Midlet Information Device Profile):
È il profilo che definisce il ciclo
di vita dell'applicazione, gli eventi, interazione tra utente applicazione
riservata alle applicazioni J2ME che girano su determinati dispotivi.
MIDlet:
L'applicazione per dispotivi MIDP.
Vediamo prima di tutto un semplice esempio di MIDLET.
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.*;
public class HelloJ2ME extends MIDlet
{
// estendiamo la classe MIDlet e quindi dobbiamo di base implementare i
// metodi startApp(), pauseApp() e destroyApp() che rispettivamente
// gestiscono l'inizio dell'applicazione, la pausa causata ad esempio da
// una telefonata in arrivo e l'uscita dall'applicazione.
public void startApp()
{
try {
Form form = new Form("Hello J2ME");
Display d = Display.getDisplay(this);
StringItem oper =new StringItem(null, "Semplice MIDLET di Benvenuto");
ImageItem lg;
Image logo = Image.createImage("/hello.png");
lg = new ImageItem("", logo, ImageItem.LAYOUT_CENTER, "Logo");
form.append(lg);
form.append(oper);
d.setCurrent(form);
// Come vedete nell'esempio bisogna prendere un istanza del Display e
// settare le nuove modifiche su questa unica istanza
} catch (Exception e) {
}
}
public void pauseApp()
{
System.out.println("In pauseApp .....\n\n");
destroyApp( true );
notifyDestroyed();
}
public void destroyApp( boolean unconditional )
{
System.out.println("In destroyApp .....\n\n");
}
}
Avviando l'emulatore vedremo qualche cosa di simile a questo:
Figura 2
Questo è quello che viene visualizzato appena facciamo partire l'sdk (in questo caso non quello della SUN ma quello della Nokia). Una volta avviata l'applicazione viene semplicemente stampato a schermo quello che volevamo, ovvero una scritta e un immagine:
Figura 3
Purtroppo per il momento nella maggior parte dei dispositivi mobili j2me funziona come una sandbox, ovvero non ha accesso a tutte le componenti del telefono. Di questo ce ne accorgiamo specialmente su cellulari come gli ultimi Nokia dove è presente un sistema operativo (SymbianOS) che permette un controllo del telefonino davvero fantastico. Ma tutto questo è possibile non programmando in j2me ma direttamente per SymbianOS. Ma proprio in questo momento sul fronte j2me si stanno sviluppando nuovissimi optional package che permetteranno, una volta diventati standard, di sviluppare in j2me applicazioni ben più interessanti di un mero giochino.
Allo stato attuale in j2me non è possibile nemmeno scrivere un File, qualora serva mantenere un'informazione persistente l'unico modo per farla rimanere memorizzata nel cellulare è l'utilizzo di RMS (Record Management System). RMS permette di memorizzare informazioni in modo persistente e recuperarle in seguito in una maniera record-oriented (ovvero un database con una tabella e una sola chiave).
Nello sviluppo di applicazioni che necessitano di networking abbiamo il pieno supporto alla connessione http e https. Inoltre è possibile instaurare una socket o inviare un datagram, quindi poter costruire un applicazione che invia o riceve dati e li elabora direttamente sul cellulare (o dispositivo mobile che sia).
Nel prossimo articolo entreremo più in dettaglio col networking e svilupperemo un applicazione che ricevendo dati tramite internet li memorizza in un RMS.
Informazioni sull'autore
Federico Paparoni, studente di Ingegneria Informatica, appassionato da anni di programmazione. Nutre profondo amore per tutta la documentazione che riesce a trovare online riguardante l'interesse del momento. Predilige la programmazione sfrenata (notte tempo!) in qualsivoglia linguaggio (se non lo conosce si impara tanto alla fine sono tutti uguali). Specializzato nel linguaggio Java, ultimamente collabora con la W-LAB srl per lo sviluppo di applicazioni su dispositivi mobili riguardanti VoiceXML e Bluetooth. Mantiene un server irc presso l'università insieme ad un gruppo di geek.