2010-06-27 7 views
9

Quiero que un evento se dispare cada hora (a las 5:00, 6:00, 7:00, etc ...). Probé con un servicio en segundo plano persistente con un hilo, pero no era la solución adecuada debido a:AlarmManager - ¿Cómo se repite una alarma en la parte superior de cada hora?

  • consumo de batería terminación del servicio
  • , debido a la gestión de memoria androide

Así que' Estoy intentando con AlarmManager. Funciona si configuro una alarma para disparar en X segundos (usando el método "set"). Pero, ¿cómo puedo repetir un evento (usando el método "setRepeating") en la parte superior de cada hora, hasta que se cancele la alarma?

Gracias!

Respuesta

15

Cuando configura las alarmas tiene dos veces: la primera hora de activación y el siguiente intervalo de activación.

Luego, debe calcular los milisegundos restantes hasta la siguiente hora, y luego establecer una hora para el intervalo de repetición.

// We want the alarm to go off 30 seconds from now. 
long firstTime = SystemClock.elapsedRealtime(); 
firstTime += remainingMilisecondsToTopHour; 
long a=c.getTimeInMillis(); 

// Schedule the alarm! 
AlarmManager am = (AlarmManager)ctx.getSystemService(Context.ALARM_SERVICE); 
am.setRepeating(AlarmManager.ELAPSED_REALTIME, 
c.getTimeInMillis(), 1*60*60*1000, sender); 
+0

Bien, este es el enfoque correcto. Gracias;) – daliz

+1

+1 Buena respuesta. Salvaste mi día. Muchas gracias! Gracias de nuevo. – Sajmon

+6

Este código parece un poco confuso. ¿De dónde viene c? ¿Por qué se crea, luego nunca se usa? –

Cuestiones relacionadas