2013-05-10 3 views
0

actuellement j'ai une application qui peut envoyer des notifications, je voudrais que cette application soit capable d'envoyer ces notifications automatiquement toutes les x minutes (par exemple, 15 minutes est la valeur par défaut). L'application peut ou ne peut pas être en cours d'exécution lorsque cette notification doit être envoyée. Après quelques lectures, j'ai déterminé qu'un AlarmManager serait utilisé ici, mais je ne peux pas comprendre comment appeler une méthode à partir de là. J'ai déjà le code de notification, j'ai juste besoin d'un moyen de l'appeler toutes les x minutes.Appeler une méthode toutes les x minutes

Je suis très nouveau à ce sujet, c'est ma première application de pratique (ayant une expérience en C#, mais peu en Java).

Merci, David.

Répondre

3

Vous voudrez peut-être envisager quelque chose comme ceci:

Intent intent = new Intent(this, MyService.class); 
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0); 

AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
// Start every 30 seconds 
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent); 

Si vous n'êtes pas certain, passez par this tutoriel

+0

Merci pour cela, il semble que cela devrait fonctionner, cependant, si j'ai ma méthode dans MainActivity.class alors comment dois-je appeler cela du service, ou devrais-je le refactoriser à sa propre classe et créer une instance de cela? –

+0

Avez-vous suivi le tutoriel que j'ai lié ci-dessus? Il y a deux choses à faire: enregistrer le service dans votre AndroidManifest.xml. La classe d'implémentation (MyService dans l'exemple ci-dessus) doit étendre la classe Service ou l'une de ses sous-classes. S'il vous plaît, commencez par le tutoriel, il inclut une partie de l'exemple de code. –

+0

J'ai lu l'exemple, mais je ne comprends toujours pas comment appeler ma méthode de notification du service? –

0

Ecrire un IntentService. A l'intérieur, il suffit de commencer un nouveau Thread. Dans le Thread.run(), mettre un infini en boucle pour appeler votre code de notification et Thread.sleep(15 * 60 * 1000) ....

0

Si vous souhaitez planifier vos tâches avec l'intervalle spécifié ne pas utiliser des drapeaux AlarmManager.RTC et AlarmManager.RTC_WAKEUP avec la méthode alarm.setRepeating(...). Parce que dans ce cas, l'alarme sera limitée à l'horloge temps réel de l'appareil. Ainsi, en changeant l'heure du système, l'alarme peut mal se comporter. Vous devez utiliser les indicateurs AlarmManager.ELAPSED_REALTIME ou AlarmManager.ELAPSED_REALTIME_WAKEUP. Dans ce cas, SystemClock.elapsedRealtime() servira de base pour programmer une alarme.

Le code ressemblera:

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + checkIntervalMillis, checkIntervalMillis, pendingIntent); 

Si vous voulez que votre longue tâche en cours d'exécution à exécuter lorsque l'appareil en mode veille, je recommande d'utiliser la bibliothèque WakefulIntentService par CommonsWare: https://github.com/commonsguy/cwac-wakeful

Questions connexes