Creare una sveglia con timer con J2ME
Pagina 1 di 4
In quest'articolo costruiremo una piccola applicazione in Java ME (Java Micro Edition) dotata di un timer e di una suoneria in grado di funzionare come una normale sveglia. Quest'applicazione in particolare ci deve consentire di impostare tramite appositi controlli grafici il numero di ore, minuti e secondi, avviare il timer, e allo scadere di quest'ultimo far partire la riproduzione di un file multimediale come suoneria.
Per prima cosa ritengo importante specificare un meccanismo che sia indipendente dall'interfaccia utente (la MIDlet) e che ci permetta di implementare facilmente questo sistema. Introduciamo allora una classe Timer ed un interfaccia che chiameremo Alarm, in grado di modellare il comportamento del timer al di fuori del contesto in cui verrà utilizzato.
L'interfaccia Alarm fornisce due metodi fondamentali, dove nell'implementazione si deve gestire l'aggiornamento del tempo che scade e la riproduzione della suoneria. Ecco l' interfaccia:
public interface Alarm {
public void refresh(String time);
public void play();
}
La classe Timer è semplicemente un Thread che partendo da un valore intero, inizia a decrementarlo un secondo alla volta (Thread.sleep()).
Essa utilizza un oggetto di tipo Alarm per notificare i cambiamenti del valore del timer ed allo scadere di quest' utlimo richiamare il metodo play():
public class Timer extends Thread {
private Alarm alarm;
private int time;
public Timer(Alarm alarm) {
this.alarm = alarm;
}
public void set(int time) {
this.time = time;
}
public void run() {
try {
while(time>0) {
time--;
alarm.refresh(toString());
Thread.sleep(1000);
}
alarm.play();
}
catch(InterruptedException ex) {}
}
public String toString() {
int sec = time;
String timeS = "";
String dp = ":";
int h = sec/3600;
int m = (sec-(h*3600))/60;
sec = sec-(m*60)-(h*3600);;
if (h<10) timeS+="0"+h+dp;
else timeS+=h+dp;
if (m<10) timeS+="0"+m+dp;
else timeS +=m+dp;
if (sec<10) timeS+="0"+sec;
else timeS+=sec;
return timeS;
}
}
Il metodo toString(), converte un intero che rappresenta il valore dei secondi, in una stringa tipo hh:mm:ss. Ad esempio se time vale 120 allora il toString() ritornera 00:02:00, cioè due minuti. Questo aspetto ci ritornerà utile fra poco nell'implementazione dell'interfaccia grafica.
L'interfaccia utente
Vediamo adesso come procedere per craere un'interfaccia utente che ci permette di interagire con la sveglia, dando uno sguardo ha le fasi principali nella costruzione dell'intera applicazione. Utilizzeremo per questo scopo due classi:
- MidletPlayAlarm: sottoclasse di MIDlet che fa partire l'applicazione utilizzando l'oggetto Timer ed implementando l' interfaccia Alarm;
- FlashScreen: un'oggetto che genera un effetto visivo quando si avvia la suoneria.







