Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
http://www.gerdavax.it/corsojavame
Stefano Sanna
Versione 1.0.1 gerdavax@gerdavax.it
3 Giugno 2006
1
Corso Java ME – http://www.gerdavax.it/corsojavame
Licenza
Copyright e marchi citati
2
Corso Java ME – http://www.gerdavax.it/corsojavame
Licenza
● Il materiale prodotto per questo corso (slide,
codice sorgente, immagini originali) è stato
rilasciata sotto la licenza
Creative Commons
Attribuzione-NonCommerciale-StessaLicenza2.5
3
Corso Java ME – http://www.gerdavax.it/corsojavame
Licenza... in pratica :-)
● E' consentito:
– utilizzare le slide per autoistruzione
– utilizzare le slide per corsi all'interno di scuole
pubbliche o università
– stampare le slide per uso personale
– ridistribuire copia delle slide senza modifiche
● Non è consentito:
– utilizzare le slide per tenere un corso a pagamento
– utilizzare le slide per un qualsiasi scopo
nascondendo le informazioni sull'autore
– modificare il contenuto delle slide
4
Corso Java ME – http://www.gerdavax.it/corsojavame
Limitazione di responsabilità
5
Corso Java ME – http://www.gerdavax.it/corsojavame
Marchi citati
● I marchi dei prodotti citati in questa presentazione
sono di proprietà dei rispettivi titolari
● Java e tutti i marchi e simboli ad esso correlati
sono di proprietà di Sun Microsystems
6
Corso Java ME – http://www.gerdavax.it/corsojavame
Java ME
MIDlet
7
Corso Java ME – http://www.gerdavax.it/corsojavame
MIDlet
● Le applicazioni scritte per il Mobile Information
Device Profile sono chiamate MIDlet
9
Corso Java ME – http://www.gerdavax.it/corsojavame
Package
● I package specifici della piattaforma Java ME
hanno (generalmente) prefisso javax.microedition:
– javax.microedition.midlet
● contiene la main class MIDlet
– javax.microedition.lcdui
javax.microedition.lcdui.game
● contengono i componenti per le interfacce grafiche 2D
– javax.microedition.io
● contiene le classi del Generic Connection Framework
– javax.microedition.rms
● contiene le classi del Record Management System
– javax.microedition.media
● contiene le classi per le funzioni multimediali (base)
10
Corso Java ME – http://www.gerdavax.it/corsojavame
Processo di sviluppo
● Il processo di sviluppo include una fase di
preverifica del bytecode prima della packaging:
preverifier
JAD
preverified
packaging Java
tool bytecode
JAR
12
Corso Java ME – http://www.gerdavax.it/corsojavame
Esempio file JAD
MIDlet-Version: 1.0.2
MIDlet-Vendor: Stefano Sanna
MIDlet-Jar-URL: http://www.gerdavax.it/corsojavame.jar
MicroEdition-Configuration: CLDC-1.1
MicroEdition-Profile: MIDP-2.0
MIDlet-1: Demo1, , it.gerdavax.corsojavame.Demo1
MIDlet-Jar-Size: 10819
MIDlet-Name: Demo1
...
...
13
Corso Java ME – http://www.gerdavax.it/corsojavame
JAD
● Contiene le informazioni sull'applicazione,
mostrate all'utente prima che si proceda con il
download e l'installazione del software
● L'Application Manager è in grado di
determinare se il dispositivo è grado di eseguire
l'applicazione (configurazione, profilo...) e se il
bytecode proviene da un dominio autorizzato ad
utilizzare certe funzionalità
● Attenzione: l'indicazione della dimensione del file
JAR deve essere esatta; in caso contrario alcuni
dispositivi rifiutano il caricamento dell'archivio
● E' consigliabile che l'URL del JAR sia assoluto
14
Corso Java ME – http://www.gerdavax.it/corsojavame
JAR
● Svolge lo stesso ruolo che ha nella Standard
Edition, con alcune differenze:
– deve contenere l'indispensabile per l'esecuzione
dell'applicazione: il dispositivo potrebbe non essere
in grado di salvare l'archivio e il costo di
trasferimento potrebbe essere troppo oneroso
– non è possibile caricare classi e risorse da JAR file
diverso da quello di avvio
● Specificità dei dispositivi:
– i terminali possono avere una limitazione sulla
dimensione massima del JAR (ad esempio: 64K)
– alcuni terminali richiedono esplicitamente che il file
JAR sia compresso
15
Corso Java ME – http://www.gerdavax.it/corsojavame
Deployment
● Il rilascio dell'applicazione per l'installazione su
dispositivo può avvenire in tre modalità principali:
– Over-The-Air: l'applicazione è resa disponibile su
un server WAP o WEB pubblico, attraverso il quale il
terminale JME può scaricarla e procedere con
l'installazione
– PC-based: si procede all'installazione attraverso
software dedicato fornito dal produttore del
dispositivo
– OBEX: il terminale JME riceve il file jar attraverso
trasferimento OBEX (Push o FTP a seconda delle
funzionalità del terminale e del PC di appoggio) e
provvedere all'installazione in maniera autonoma
16
Corso Java ME – http://www.gerdavax.it/corsojavame
JAD, JAR & Manifest...
● Alcuni terminali permettono l'installazione
dell'applicazione a partire dal solo file JAR:
quest'ultimo, infatti, contiene le medesime
informazioni del JAD all'interno del Manifest (ad
eccezione dell'URL e della dimensione del JAR
stesso!)
application/java-archive jar
text/vnd.sun.j2me.app-descriptor jad
18
Corso Java ME – http://www.gerdavax.it/corsojavame
Ciclo di vita delle MIDlet
destroyApp()
pauseApp()
caricamento
19
Corso Java ME – http://www.gerdavax.it/corsojavame
MIDlet skeleton
import javax.microedition.midlet.*;
public MyMIDlet() { }
}
20
Corso Java ME – http://www.gerdavax.it/corsojavame
Inizializzazione e avvio
● L'inizializzazione della MIDlet deve avvenire nel
costruttore:
– creazione dell'interfaccia grafica (consigliata lazy
initialization)
– allocazione delle strutture dati principali
– lettura parametri di piattaforma
21
Corso Java ME – http://www.gerdavax.it/corsojavame
Sospensione
● Il metodo pauseApp() è invocato al
sopraggiungere di una chiamata o altro evento
per il quale è richiesto di sospendere
l'applicazione
22
Corso Java ME – http://www.gerdavax.it/corsojavame
MIDlet: cominciano i problemi...!
● L'ambiente di sviluppo ci invita a implementare i
metodi principali della MIDlet, ma è facile
constatare che non tutti funzionano...:
pauseApp(), ad esempio, non è invocato quasi
mai! I produttori dei dispositivi... l'hanno ignorato!
:-(
23
Corso Java ME – http://www.gerdavax.it/corsojavame
Interazione con l'Application Manager
● L'applicazione notifica all'Application Manager
eventuali variazioni nel suo stato, attraverso i
metodi definiti nella classe MIDlet:
24
Corso Java ME – http://www.gerdavax.it/corsojavame
Chiusura di una applicazione
● Il ciclo di vita di una MIDlet è gestito
dall'Application Manager: per questo motivo,
l'applicazione non conclude la sua esecuzione con
il classico
System.exit(EXIT_CODE)
notifyDestroyed()
25
Corso Java ME – http://www.gerdavax.it/corsojavame
Property
● La MIDlet può accedere a due set di property:
– System property
● dipendono dal dispositivo in uso
● forniscono informazioni sul runtime, la configurazione, il
profilo e la versione di tutte le API opzioni disponibili
● si leggono attraverso il metodo System.getProperty()
– MIDlet property
● sono contenute all'interno del file JAD
● fanno parte del packaging dell'applicazione
● eventuali property dinamiche (generate in fase di OTA
deployment) possono essere aggiunte
● si leggono con il metodo getAppProperty() della classe
MIDlet
26
Corso Java ME – http://www.gerdavax.it/corsojavame
System.getProperty() keys
microedition.platform microedition.smartcardslots
microedition.encoding microedition.location.version
microedition.configuration microedition.sip.version
microedition.profiles microedition.m3g.version
microedition.io.file.FileConn microedition.jtwi.version
ection.version
wireless.messaging.sms.smsc
file.separator
wireless.messaging.mms.mmsc
microedition.pim.version
CHAPI-Version
microedition.locale
microedition.commports
microedition.hostname
27
Corso Java ME – http://www.gerdavax.it/corsojavame
Hello World!
● Prima di procedere con la descrizione dettagliata
della libreria e delle tecniche di sviluppo su Java
ME... il classico Hello World!
28
Corso Java ME – http://www.gerdavax.it/corsojavame
Hello World!
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public HelloWorld() {
}
29
Corso Java ME – http://www.gerdavax.it/corsojavame
Una MIDlet un po' più complessa...
● La MIDlet HelloWorld può essere facilmente
arricchita, cosi' da mostrare il valore delle
property di sistema relative al dispositivo in cui e'
in esecuzione
30
Corso Java ME – http://www.gerdavax.it/corsojavame
System Properties Scanner
● Il telaio della MIDlet è pressoché simile:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
}
31
Corso Java ME – http://www.gerdavax.it/corsojavame
System Properties Scanner
● La classe definisce un vettore di chiavi:
private static String[] KEYS = {"microedition.platform", "microedition.encoding",
"microedition.configuration", "microedition.profiles",
"microedition.io.file.FileConnection.version",
"file.separator",
"microedition.pim.version",
"microedition.locale",
"microedition.commports",
"microedition.hostname",
"microedition.smartcardslots",
"microedition.location.version",
"microedition.sip.version",
"microedition.m3g.version",
"microedition.jtwi.version",
"wireless.messaging.sms.smsc",
"wireless.messaging.mms.mmsc",
"CHAPI-Version"};
32
Corso Java ME – http://www.gerdavax.it/corsojavame
System Properties Scanner
● Il metodo initApp() inizializza l'applicazione,
istanziando l'interfaccia grafica e popolandola con
i valori delle property:
// tutte le inizializzazioni
String property;
property = System.getProperty(KEYS[i]);
33
Corso Java ME – http://www.gerdavax.it/corsojavame
L'applicazione sugli emulatori
34
Corso Java ME – http://www.gerdavax.it/corsojavame
L'applicazione sui dispositivi
35
Corso Java ME – http://www.gerdavax.it/corsojavame
Corso Java ME
http://www.gerdavax.it/corsojavame
36
Corso Java ME – http://www.gerdavax.it/corsojavame