NOVEDADES IMPORTANTES

Acceso a todos los contenidos

Hace unos meses decidimos suspender nuestra actividad de formación online en Digital Learning SL (propietaria de esta web).

Desde entones hemos mantenido operativos nuestra plataforma de teleformación y webs de contenidos Academia Android y Digital Learning, habilitando un acceso libre y gratuito a todos estos recursos, incluyendo cursos y contenidos Premium que antes requerían un registro y pago previo, lo que ha propiciado un volumen de visitas constante de usuarios que consultan esta formación.

Venta-traspaso de los contenidos

Creemos que estas webs por sus contenidos, posicionamiento SEO y atracción de tráfico (junto a sus cuentas en redes sociales asociadas, incluyendo Twitter y Facebook de nuestro curso de Community Manager) pueden ser una oportunidad para emprendedores o compañías de diversos ámbitos (formación, marketing y publicación online, desarrollo software,…) que quieran:

  • Captar usuarios, alumnos o clientes para sus proyectos, productos y servicios.
  • Comercializar los contenidos bajo múltiples fórmulas: venta de publicidad, modelos freemium o de pago, suscripciones…
  • Crear un nuevo proyecto a partir de esta infraestructura de recursos.

Si tú o tú empresa estáis interesados en adquirirlos, ofrecemos su traspaso en propiedad exclusiva. Puedes contactar conmigo en «contacto@digitallearning.es» (por favor entiende que los correos que no vengan suficientemente identificados no vamos a atenderlos). Gracias.

Manuel Cabello (Socio-Director de Digital Learning/Academia Android)

Este es el número de tutoriales publicados:

Pincha en los textos de los contadores de Tutoriales publicados, Premium o Series de tutoriales para tener un detalle de las publicaciones que comprenden.

Desde hace unos meses, todos los contenidos, incluidos los Premium, son accesibles libre y gratuitamente.

  • Premium
  • Acceso libre
130
Acceso libre
126
Premium

Algunos datos sobre los contenidos que hemos publicado hasta la fecha:

74
Videos
61
Proyectos descargables
contacto[arroba]digitallearning.es

Clase AlarmManager: planificación de tareas en Android

Post Series: Tareas en segundo plano en Android (II)

Características e implementación de la clase AlarmManager

A continuación vamos tratar las principales características del uso de la clase AlarmManager, además de conocer su implementación a nivel de código.

La clase AlarmManager nos permite acceder al servicio de alarmas del sistema, cuya principal funcionalidad es poder programar operaciones, en un tiempo establecido, fuera del ciclo de vida de la aplicación.
Cuando se dispara una alarma, los diferentes Intents que han sido registrados en el sistema, iniciarán la aplicación si no está en ejecución.

Diagrama Alarm Manager

Principales características:

  • Permite lanzar varios intents en intervalos o tiempos establecidos.
  • Al poder ejecutar operaciones fuera del ámbito de ejecución de la aplicación, será posible el uso de desencadenadores de eventos o acciones, incluso con el dispositivo «dormido».
  • Es posible utilizarlas en combinación con broadcast receivers para iniciar servicios.
  • Ayudan a minimizar el consumo de recursos de la aplicación, programando el consumo de servicios, de manera continua, en operaciones en segundo plano.

Posibles desventajas del uso de AlarmManager:

  • Su flexibilidad limitada puede acarrear grandes consumos de batería en operaciones de red.
  • Para tareas de sincronización con un servidor de datos, Google recomienda el uso de la clase Sync Adapter, debido a que ofrece un abanico más amplio de posibilidades y mayor flexibilidad.
  • Se recomienda su uso para los casos en los que el código de la aplicación se desee ejecutar a una hora determinada, incluso si la aplicación no está iniciada. Para tareas normales en intervalos de tiempo, se recomienda el uso de la clase Handler.

Implementación

En primer lugar llamaremos con la sentencia «import» al packages de la clase AlarmManager:
import android.app.AlarmManager;

Declararemos la clase:
AlarmManager planificarAlarma;

Al no definir un constructor por defecto, se le asigna el servicio de alarmas del sistema:
planificarAlarma = (AlarmManager)getSystemService(ALARM_SERVICE);

Inicializamos un intent para que invoque la clase encargada de registrar el evento del sistema (clase que hereda de BroadcastReceiver).
Intent intent = new Intent(getApplicationContext(), PlanificarTareas.class);

Definimos la clase PendingIntent para lanzar un broadcast, recibiendo como parámetro el intent construido:
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);

Por último se invocará el método setRepeating(), indicando entre sus parámetros que la alarma se repetirá, incluso si el dispositivo está «dormido», e inicialmente transcurridos 10 segundos desde el arranque, recibiendo como intervalo de tiempo entre repeticiones el valor de una variable, que indicaremos en segundos, además de indicarle el PendingIntent ya inicializado anteriormente:
planificarAlarma.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,10000, tiempo_repeticion*1000, pi);

Nota: Será necesario declarar en el AndroidManifest.xml un «Receiver» que nos permitirá recibir los intents en nuestra Aplicación Android:

 

Documentación oficial BroadcastReceiver

Métodos públicos y Constantes de la clase AlarmManager

En este apartado se mostrarán los métodos y constantes que define la clase AlarmManager, para comprender los diferentes parámetros que maneja dicha clase en su implementación.

Nota: Debido a que la mayoría de métodos reciben entre sus parámetros los valores en milisegundos, se realizará un pequeño ejemplo de como obtener la fecha actual en milisegundos:

Para ello en primer lugar crearemos una istancia de la clase Calendar:
Calendar cal = Calendar.getInstance();

Posteriormente, almacenamos la hora actual en milisegundos, invocando al método setTimeInMillis, que recibirá como parámetro la hora actual, en milisegundos, estableciendo como fecha inicial el 1 de Enero de 1970 00:00:00.0 UTC, a través de la clase System y su llamada al método currentTimeMillis():
cal.setTimeInMillis(System.currentTimeMillis());

Documentación oficial Calendar

Nota: En el ejercicio práctico que veremos el siguiente tutorial, se utiliza el componente TimePicker para convertir los valores introducidos por el usuario en milisegundos.

 

Métodos Públicos Valor que devuelve y Descripción
cancel(PendingIntent operation) void
Cancela las alarmas recibiendo como parámetro el intent correspondiente
set(int type, long triggerAtMillis, PendingIntent operation) void
Planifica una alarma
setExact(int type, long triggerAtMillis, PendingIntent operation) void
Planifica una alarma en el momento exacto programado
setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation) void
Programa una alarma, de manera repetida, lanzada en intervalos de tiempo inexactos
setRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation) void
Programa la repetición de una alarma
setTime(long millis) void
Ajusta la hora del sistema
setTimeZone(String timeZone) void
Establece la zona horaria por defecto del sistema
setWindow(int type, long windowStartMillis, long windowLengthMillis, PendingIntent operation) void
Planifica una alarma, que será entregada dentro de una ventana de tiempo determinada

 

Constante Tipo de dato y Descripción
ELAPSED_REALTIME int
Tiempo de la alarma desde el arranque, incluyendo la pausa.
Valor constante: 3 (milisegundos)
ELAPSED_REALTIME_WAKEUP int
Tiempo de la alarma desde el arranque, incluyendo la pausa, que «despertará» al dispositivo cuando este se apague.
Valor constante: 2 (milisegundos)
INTERVAL_DAY long
Intervalo de repetición inexacta, implementado por el método setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation), para las versiones de Android inferiores al API 19.
Valor constante: 86400000 (milisegundos)
INTERVAL_FIFTEEN_MINUTES long
Intervalo de repetición inexacta, implementado por el método setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation), para las versiones de Android inferiores al API 19.
Valor constante: 900000 (milisegundos)
INTERVAL_HALF_DAY long
Intervalo de repetición inexacta, implementado por el método setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation), para las versiones de Android inferiores al API 19.
Valor constante: 43200000 (milisegundos)
INTERVAL_HALF_HOUR long
Intervalo de repetición inexacta, implementado por el método setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation), para las versiones de Android inferiores al API 19.
Valor constante: 1800000 (milisegundos)
INTERVAL_HOUR long
Intervalo de repetición inexacta, implementado por el método setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation), para las versiones de Android inferiores al API 19.
Valor constante: 3600000 (milisegundos)
RTC int
Hora de la alarma en System.currentTimeMillis(), que devuelve la hora actual en milisegundos, desde el 1 de enero 1970 00:00:00.0 UTC.
Valor constante: 1 (milisegundos)
RTC_WAKEUP int
Hora de la alarma en System.currentTimeMillis(), que devuelve la hora actual en milisegundos, desde el 1 de enero 1970 00:00:00.0 UTC, y que «despertará» al dispositivo cuando este se apague.
Valor constante: 0 (milisegundos)

Nota: La medida de los valores de las constantes es milisegundos.