J2ME: Despertador en un MIDLET

jueves, 22 de abril de 2010 15:03 Publicado por Joseph Gonza Chavez
Etiquetas:

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 paquete
package 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