2010-06-27 6 views
9

Je souhaite qu'un événement se déclenche toutes les heures (à 5h00, 6h00, 7h00, etc ...). J'ai essayé avec un service de fond persistant avec un fil, mais ce ne fut pas la bonne solution en raison de:AlarmManager - Comment répéter une alarme en haut de chaque heure?

  • consommation de la batterie
  • cessation de service, en raison de la gestion de la mémoire Android

donc je J'essaie avec AlarmManager. Cela fonctionne si je mets une alarme à tirer dans X secondes (en utilisant la méthode "set"). Mais comment puis-je répéter un événement (en utilisant la méthode "setRepeating") en haut de chaque heure, jusqu'à ce que l'alarme soit annulée?

Merci!

Répondre

15

Lorsque vous définissez des alarmes, vous avez deux temps: le premier temps de déclenchement et le prochain intervalle de déclenchement.

Vous devez ensuite calculer les milisecondes restantes jusqu'au prochain sommet de l'heure, puis définir une heure pour l'intervalle de répétition.

// 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

Ok, c'est la bonne approche. Merci;) – daliz

+1

+1 Bonne réponse. Tu as sauvé ma journée. Merci beaucoup! Merci encore. – Sajmon

+6

Ce code semble un peu flou. D'où vient c? pourquoi est créé, alors jamais utilisé? –

Questions connexes