AlarmManager déclenche des alarmes au mauvais moment
J'ai réussi à tout droit de créer un service de notification utilisé pour déclencher une notification suite à une alarme. Malheureusement, le réglage de l'alarme à l'aide de AlarmManager ne fonctionne pas bien. Il tire plusieurs minutes plus tard (pas exactement les heures, ce qui pourrait indiquer un problème de fuseau horaire). La période récurrente est de 1 semaine, j'ai donc utilisé la constante INTERVAL_DAY et multiplié par 7. Afin de s'assurer que l'un PendingIntent ne remplace pas l'autre, je passe le dayOfWeek comme second paramètre de PendingIntent.la méthode getService(). J'ai vérifier l'exactitude de l'heure de l'alarme à feu par l'exploitation forestière:
Log.d(TAG, "next alarm " + df.format(cal.getTime()));
Est-il vraiment aucun moyen de la liste de toutes les alarmes - au moins ceux de mon propre application? Je crois que c'est la seule façon de localiser l'erreur.
Mon code:
cal.setTimeInMillis(System.currentTimeMillis());
cal.add(Calendar.DATE, 1);
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
Log.d(TAG, "next alarm " + df.format(cal.getTime()));
Intent showNotificationIntent = new Intent(context, NotificationService.class);
dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
alarmIntent = PendingIntent.getService(context, dayOfWeek, showNotificationIntent, 0);
getAlarmManager(context).setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
INTERVAL_WEEK, alarmIntent);
Je veux offrir à avoir une alarme tous les jours, mais à des moments divers, qui peut être définie par l'utilisateur. J'ai donc utiliser jusqu'à 7 alarmes, qui doit se déclencher sur une base hebdomadaire.
Même après avoir lu les nombreuses réponses à des questions similaires (je n'ai pas l'intention de créer un double de la question), je n'ai pas réussi à trouver le problème.
source d'informationauteur Holger Jakobs | 2014-01-30
Vous devez vous connecter pour publier un commentaire.
Pour api niveaux en dessous de 19, vous devriez utiliser
AlarmManager.setRepeating()
et vos alarmes se déclenchent exactement à l'heure indiquée. Tu api niveaux 19 et au-dessus de cela ne fonctionnera plus. Il y avait du changement dans android, de sorte que tous répéter les alarmes sont inexactes. Donc, si vous voulez atteindre exacte répétition de l'alarme, vous devez planifier d'alarme avecAlarmManager.setExact()
et puis lorsque l'alarme se déclenche le faire pour la semaine prochaine et ainsi de suite chaque semaine.En raison de setInexactRepeating. Utilisation setRepeating et elle sera traitée au bon moment.
Au lieu de:
utilisation
setInexactRepeating, est OS et la batterie de l'environnement, il lots ensemble tout le travail à faire sur l'Alarme de recevoir et de travaux par un par un, tout comme setRepeating instantanément déclenche l'alarme
Aussi une remarque: les Alarmes sont effacés une fois que le téléphone est redémarré, vous pourriez avoir à mettre en œuvre un démarrage récepteur de radiodiffusion pour le rendre persistant. Assurez-vous que vous ne faites pas que de l'exécution, vous devez mettre en œuvre dans le Manifeste autrement, si votre application n'est pas en arrière, vous ne recevrez pas d'émissions.
Un petit exemple:
C'est du code qui fonctionne. Il se réveille CPU toutes les 10 minutes jusqu'à ce que le téléphone s'éteint.
Ajouter à Manifest.xml:
Code:
Réglage de l'Alarme de Service:
Si vous souhaitez régler l'alarme de répéter au téléphone de temps de démarrage:
Ajouter la permission de Manifest.xml:
Et de créer la nouvelle classe: