Sviluppo di una semplice applicazione j2me
Ecco un primo approccio al mondo J2ME con un semplice HelloWorld
Tra le versioni che esistono di java, J2ME è la versione destinata a girare su apparecchi mobili o comunque di misure ridotte. J2ME funziona con due diverse configurazioni (CDC e CDLC) che differiscono appunto per potenzialità che l’apparecchio offre.
Per quanto riguarda i profili 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 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. Vediamo prima di tutto un semplice esempio di MIDLET
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
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{ // Come vedete nell'esempio bisogna prendere un istanza // del Display e settare le nuove modifiche // su questa unica istanza 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); } 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"); } } |
Una volta avviata l’applicazione viene semplicemente stampato a schermo quello che volevamo, ovvero una scritta e un immagine.
Purtroppo per il momento nella maggior parte dei dispositivi mobili J2ME funziona come in 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.
Questo però non programmando in J2ME perché appunto è rinchiuso in una sandbox. Ma proprio in questo momento sul fronte J2ME si stanno scatenando nuovissimi optional package che permetteranno, una volta diventati standard, di poter fare lo sviluppo in j2me di interessantissime applicazioni.
Allo stato attuale non è possibile nemmeno scrivere un file e se uno deve far appoggiare la sua applicazione su qualcosa che rimane memorizzato nel cellulare deve utilizzare RMS (Record Management System) che 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.