J2ME: Despertador en un MIDLET
jueves, 22 de abril de 2010
15:03
Publicado por
Joseph Gonza Chavez
Etiquetas:
J2ME
Preguntandose como hacer un despertador J2ME, para tu celular? aqui te traigo una solucion, lastima que esta aplicacion solo funciona cuando el programa esta corriendo.
Despertador.java_________________________
______________________________________//Nombre del paquetepackage despertador;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.io.*;
import java.util.*;
import java.util.Timer;
import java.util.TimerTask;
// Clase que implementa el despertador
public class DespertadorMid extends MIDlet
implements CommandListener,ItemStateListener {
// Definimos la variable de la pantalla del dispositivo
private Display display;
// Definimos el formulario que va a contener los elementos
private Form formulario;
// Definimos el campo de fecha que se va a permitir la edición de fecha
// y hora en que sonará la alarma
private DateField cFecha;
// Indice que corresponde al campo en el formulario
private int indice;
// Definimos el item que contendrá la imagen a presentar
// en el formulario durante el tiempo de espera
private ImageItem cImagen;
// Definimos el comando para abandonar la aplicación
private Command salir;
// Definimos el comando para arrancar el despertador
private Command iniciar;
// Definimos el comando para resetear el despertador a la fecha actual
private Command reset;
// Fecha actual, que se actualiza con el comando reset
private Date ahora;
// Indica si la entrada de fecha es correcta
private boolean correcto = false;
// Temporizador de control del despertador para que
// suene a la hora fijada
private Timer timer;
// Tarea que es invocada por el temporizador
private Temporizador temporizador;
// Imágenes que se presentan en las pantallas de aviso
private Image[] imagenes = new Image[3];
// Constructor de la clase
public DespertadorMid() {
// Obtenemos los iconos a partir de las imágenes PNG
// Creen archivos e incluyanlo dentro de su carpeta SRC
try {
imagenes[0] = Image.createImage( "/reloj.png" );
imagenes[1] = Image.createImage( "/zz.png" );
imagenes[2] = Image.createImage( "/aviso_2.png" );
} catch( IOException e ) {}
// Creamos el formulario al que vamos a incorporar los
// elementos y los comandos de control
formulario = new Form( "Fijar fecha/hora" );
// Creamos el campo de fecha
cFecha = new DateField( "",DateField.DATE_TIME );
// Creamos el item con la imagen para cuando esté el
// despertador en funcionamiento
cImagen = new ImageItem( " ",imagenes[1],
ImageItem.LAYOUT_CENTER,"... ..." );
// Creamos el comando de arranque del Despertador
iniciar = new Command( " Iniciar",Command.SCREEN,1 );
// Creamos el comando de reseteo de la fecha
reset = new Command( " Reset",Command.SCREEN,1 );
// Inicializamos el comando de salida de la aplicación
salir = new Command( "Salir",Command.EXIT,1 );
}
// Método que arranca el midlet creando un formulario y
// asignándole los elementos
protected void startApp() {
// Recuperamos el display del objeto estático del Sistema
display = Display.getDisplay( this );
// Actualizamos la variable de la fecha actual
ahora = new Date();
// Inicializamos el campo de fecha con la fecha actual
cFecha.setDate( ahora );
// Incorporamos el Campo de Fecha al formulario
indice = formulario.append( cFecha );
// Incorporamos el comando para arrancar el despertador
formulario.addCommand( iniciar );
// Incorporamos el comando para resetear la fecha
formulario.addCommand( reset );
// Incorporamos el comando de cierre del midlet
formulario.addCommand( salir );
// Fijamos el receptor de eventos sobre el formulario
formulario.setCommandListener( this );
// Fijamos el receptor de eventos de cambio de estado
formulario.setItemStateListener( this );
// Presentamos la pantalla con el campo de fecha y hora
display.setCurrent( formulario );
}
// Suspende las acciones en segundo plano y libera recursos
// mientras el midlet no está activo
protected void pauseApp() {}
// Detiene toda actividad del midlet y libera los recursos
protected void destroyApp( boolean flag ) {}
public void itemStateChanged( Item item ) {
// Controlamos la fecha que se selecciona
if( item == cFecha ) {
// Si se ha indicado una fecha anterior a la actual
// fijamos la variable correspondiente
// El método getTime() devuelve los milisegundos
// transcurridos desde el 1 de Enero de 1970
if( cFecha.getDate().getTime() < ahora.getTime() )
correcto = false;
else
correcto = true;
}
}
// Método que controla los comandos de la pantalla
public void commandAction( Command c,Displayable d ) {
// Si queremos arrancar el despertador
if( c == iniciar ) {
// Comprobamos antes que la fecha sea correcta, en
// caso de que no lo sea se lo indicamos al usuario
if( correcto == false ) {
Alert aviso = new Alert( "Fecha/Hora errónea..",
"Selecciona otra fecha...",imagenes[2],AlertType.ERROR );
aviso.setTimeout( Alert.FOREVER );
display.setCurrent( aviso );
}
// Si es correcta la fecha, arrancamos el despetador
else {
// Creamos un nuevo temporizador
timer = new Timer();
temporizador = new Temporizador();
// Calculamos el tiempo que queda hasta que llegue la
// hora en que se ha fijado el despertador
long periodo = cFecha.getDate().getTime() - ahora.getTime();
// Programamos la tarea para que se lance tras el periodo
// calculado
timer.schedule( temporizador,periodo );
// Eliminamos todos los elementos del formulario
formulario.removeCommand( iniciar );
formulario.removeCommand( reset );
formulario.delete( indice );
// Cambiamos el título del formulario
formulario.setTitle( "Esperando..." );
// Incorporamos la imagen de espera y dormitando
indice = formulario.append( cImagen );
}
}
// Si queremos resetar la fecha, volvemos a la actual
else if( c == reset ) {
cFecha.setDate( ahora = new Date() );
}
// Si de verdad queremos abandonar la aplicación
else if( c == salir ) {
// Concluimos la ejecución y liberamos recursos
destroyApp( true );
// Notificamos a la plataforma que el midlet desaparece
notifyDestroyed();
}
}
// Clase anidada que se encarga de presentar la pantalla
// de alcance de la hora fijada para despertarse
private class Temporizador extends TimerTask {
public final void run() {
Alert aviso = new Alert( "Hora de despertarse!"," ",
imagenes[0],AlertType.ALARM );
aviso.setTimeout( Alert.FOREVER );
AlertType.ERROR.playSound( display );
AlertType.ALARM.playSound( display );
display.setCurrent( aviso );
// Paramos el temporizador
cancel();
}
}
}
Comments (0)
Publicar un comentario