Hay dos servicios propios del sistema operativo Android que son: AlarmManager y Vibrator. Alarm Managernos proporciona acceso a los servicios del sistema de alarma, que en pocas palabras nos ayuda a programar nuestras aplicaciones para que se ejecuten en algún momento del futuro. Generalmente, al momento de dispararse la alarma, el Intent que previamente se registró se manda a llamar y se ejecuta la acción que necesitamos haga la aplicación. En cuanto a la claseVibrator, nos ayudará a manejar las funciones de vibración en el dispositivo.
El código
Pasemos a crear el ejemplo para ver cómo utilizar estos componentes:
1. Creamos un nuevo proyecto llamado SystemServicesTest con la versión Android 2.2.
2. La idea del demo es tener una primera pantalla (actividad) en dónde definiremos los segundos dentro de los cuáles se activará la alarma y desde ahí se mande a llamar a unBroadcastReceiver que es el que disparará todos los eventos relacionados con la vibración del teléfono.
Para ello modificamos nuestro archivo main.xml del directorio res > layout del proyecto como te muestro a continuación:
El código
Pasemos a crear el ejemplo para ver cómo utilizar estos componentes:
1. Creamos un nuevo proyecto llamado SystemServicesTest con la versión Android 2.2.
2. La idea del demo es tener una primera pantalla (actividad) en dónde definiremos los segundos dentro de los cuáles se activará la alarma y desde ahí se mande a llamar a unBroadcastReceiver que es el que disparará todos los eventos relacionados con la vibración del teléfono.
Para ello modificamos nuestro archivo main.xml del directorio res > layout del proyecto como te muestro a continuación:
3. Ahora pasemos a crear el BroadcastReceiver, agregando una nueva clase llamadaVibrationPhone al paquete principal del directorio src del proyecto. En ella, vamos a escribir el siguiente código:
Como VibrationPhone es una clase que extiende de BroadcastReceiver, implementamos el métodoonReceive() que recibe el contexto desde donde es llamado y un Intent que lo disparará en la actividad que lo llame. Esta clase se llamará cuando el tiempo que hayamos definido en la actividad principal se acabe, por eso hemos definido un Toast para que le muestre un mensaje al usuario de que el tiempo que definió se terminó e inmediatamente creamos un objeto de tipoVibrator que lo inicializaremos con el servicio propio del sistema que nos dejará hacer que el teléfono vibre. Por último, definimos la duración de la vibración en milisegundos a través del método vibrate().
5. Ahora nos pasamos a la actividad del proyecto, en mi caso, la clase se llamaSystemServicesTestActivity y hereda efectivamente de la clase Activity. En esta clase vamos a crear un método llamado startAlert() que debe corresponder con el nombre que definimos para el atributo android:onClick del Button en el archivo main.xml. A continuación te muestro el código de la clase completa:
5. Ahora nos pasamos a la actividad del proyecto, en mi caso, la clase se llamaSystemServicesTestActivity y hereda efectivamente de la clase Activity. En esta clase vamos a crear un método llamado startAlert() que debe corresponder con el nombre que definimos para el atributo android:onClick del Button en el archivo main.xml. A continuación te muestro el código de la clase completa:
En este método recuperamos una referencia del EditText del layout que es en donde definimos los segundos que dura nuestra alarma y le hacemos el parseo correspondiente a int. Creamos un Intent que “apunta” a nuestro BroadcastReceiver. Luego, haciendo uso de un PendingIntent es que pasamos el contexto en el que este objeto va a ejecutar la acción de tipo broadcast, un código de respuesta que generalmente es un identificador que nos ayuda a diferenciar las peticiones que hace nuestra aplicación para realizar una acción o para utilizar un recurso del sistema, y el intent definido anteriormente.
Después, creamos un objeto de AlarmManager inicializándolo con el servicio propio del sistema. Con el método set() definimos el tiempo en el que será lanzada la alarma y el PendingIntent que se encargará de llamar la magia de la aplicación. Y por último, lanzamos un Toast que le notificará al usuario cuántos segundos ha definido para la alarma.
6. Ahora sólo resta definir el BroadcastReceiver y los permisos correspondientes en el archivo AndroidManifest.xml como te muestro a continuación:
Después, creamos un objeto de AlarmManager inicializándolo con el servicio propio del sistema. Con el método set() definimos el tiempo en el que será lanzada la alarma y el PendingIntent que se encargará de llamar la magia de la aplicación. Y por último, lanzamos un Toast que le notificará al usuario cuántos segundos ha definido para la alarma.
6. Ahora sólo resta definir el BroadcastReceiver y los permisos correspondientes en el archivo AndroidManifest.xml como te muestro a continuación:
7. Para probar este ejemplo, debo aclarar que será necesario correrlo directamente en el teléfono ya que el emulador no tiene forma de reproducir la vibración con la que estamos trabajando para este demo.
El flujo de la aplicación es el siguiente:
El flujo de la aplicación es el siguiente:
Fijamos la alarma.
Empieza a vibrar el teléfono.