0

J'utilise AlarmManager, en essayant de créer une application d'alarme pour Android. J'ai remarqué que setRepeating ne fonctionnait pas lorsque le téléphone dort. Donc, j'ai essayé setExactAndAllowWhileIdle.Est-ce à cause du mode Doze dans Android, je ne peux jamais créer une application de réveil précise avec AlarmManager?

Mais, je lis ceci:

Contrairement à d'autres alarmes, le système est libre de modifier la ce type d'alarme pour se produire hors d'usage avec d'autres alarmes, même ceux de la même application. Cela se produira clairement lorsque l'appareil est inactif (puisque cette alarme peut être désactivée en mode veille, lorsque d'autres alarmes de l'application seront conservées plus tard), mais peut également se produire même si elle n'est pas inactive. Notez que le système d'exploitation se permettra plus de flexibilité pour planifier ces alarmes que les alarmes exactes régulières, puisque l'application a opté pour ce comportement. Lorsque l'appareil est inactif, il peut prendre encore plus de libertés avec la planification afin d'optimiser la vie de la batterie.

J'ai besoin de minutages précis comme un réveil. Un utilisateur le définit pour 6h00 puis sonner à 6h01 ou 6h02 serait bizarre! Ne pas sonner du tout parce que le téléphone est inactif est catastrophique!

Que puis-je faire maintenant? N'utilisez pas d'alarmes répétées à cet effet.

Répondre

0

Ils ne sont pas assez précis/fiables. Programmez une alarme en utilisant set() ou setExact() (en fonction du niveau de votre API cible). Lorsque cette alarme se déclenche, définissez la suivante.

REMARQUE: Assurez-vous que vous utilisez un type d'alarme qui réveillera le téléphone:

  • RTC_WAKEUP ou
  • ELAPSED_REALTIME_WAKEUP
+0

Ok, je suis totalement évité de répéter les alarmes principalement cus ils ne le font pas travailler du tout après que le téléphone entre en mode somnolence. Mais, j'ai essayé de régler l'alarme en utilisant "setExactAndAllowWhileIdle", mais le problème est que si je le mets pour la première fois à 6:00, il se déclenche. Le réglage après le tir à 6:01 ne tirera qu'après le passage de 10 à 15 minutes après le précédent. Je teste en utilisant l'API 23. – Mena

+0

Veuillez utiliser 'setExact()', pas 'setExactAndAllowWhileIdle()'. Cela vous donnera le comportement que vous voulez. –

+0

J'ai essayé ce qui suit pour tester la notification push par minute: alarmMgr.setExact (AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60 * 1000, alarmIntent); Fonctionne pendant 2 minutes, puis commence à être totalement inexact et retardé. Pourquoi? – Mena