09.02.2017 Views

creez-des-applications-pour-android

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

5.2 Les services<br />

// Ne me faites pas de cadeaux en avril surtout !<br />

calendar.set(1987, 4, 10, 17, 35);<br />

manager.set(RTC_WAKEUP, calendar.getTimeInMillis(), pending);<br />

Et <strong>pour</strong> une alarme qui se lance dans 20 minutes et 50 secon<strong>des</strong> :<br />

calendar.set(Calendar.MINUTE, 20);<br />

calendar.set(Calendar.SECOND, 50);<br />

manager.set(ELAPSED_REALTIME, calendar.getTimeInMillis(), pending);<br />

5.2.5.2 Les alarmes récurrentes<br />

Il existe deux métho<strong>des</strong> <strong>pour</strong> définir une alarme récurrente. La première est void setRepeating(int<br />

type, long triggerAtMillis, long intervalMillis, PendingIntent operation)<br />

qui prend les mêmes paramètres que précédemment à l’exception de intervalMillis qui est<br />

l’intervalle entre deux alarmes. Vous pouvez écrire n’importe quelle durée, cependant il existe<br />

quelques constantes qui peuvent vous aider :<br />

— INTERVAL_FIFTEEN_MINUTES représente un quart d’heure.<br />

— INTERVAL_HALF_HOUR représente une demi-heure.<br />

— INTERVAL_HOUR représente une heure.<br />

— INTERVAL_HALF_DAY représente 12 heures.<br />

— INTERVAL_DAY représente 24 heures.<br />

Vous pouvez bien entendu faire <strong>des</strong> opérations, par exemple INTERVAL_HALF_DAY = INTERVAL_DAY<br />

/ 2. Pour obtenir une semaine, on peut faire INTERVAL_DAY * 7.<br />

Si une alarme est retardée (parce que l’appareil est en veille et que le mode choisi ne réveille pas<br />

l’appareil par exemple), une requête manquée sera distribuée dès que possible. Par la suite, les<br />

alarmes seront à nouveau distribuées en fonction du plan originel.<br />

Le problème de cette méthode est qu’elle est assez peu respectueuse de la batterie, alors si le délai<br />

de répétition est inférieur à une heure, on utilisera plutôt void setInexactRepeating(int<br />

type, long triggerAtMillis, long intervalMillis, PendingIntent operation),<br />

auquel cas l’alarme n’est pas déclenchée au moment précis si c’est impossible.<br />

[[erreur]] | Une alarme ne persiste pas après un redémarrage du périphérique. Si vous souhaitez<br />

que vos alarmes se réactivent à chaque démarrage du périphérique, il vous faudra écouter le<br />

Broadcast Intent appelé ACTION_BOOT_COMPLETED.<br />

5.2.5.3 Annuler une alarme<br />

Pour annuler une alarme, il faut utiliser la méthode void cancel(PendingIntent operation)<br />

où operation est le même PendingIntent qui accompagnait l’alarme. Si plusieurs alarmes<br />

utilisent le même PendingIntent, alors elles sont toutes annulées.<br />

[[attention]] | Il faut que tous les champs du PendingIntent soient identiques, à l’exception du<br />

champ Données. De plus, les deux PendingIntent doivent avoir le même identifiant.<br />

363

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!