2010-10-04 23 views
11

J'écris une application qui a besoin de vérifier périodiquement le serveur pour les nouveaux messages et informer l'utilisateur. J'ai vu quelques exemples en utilisant AlarmManager pour frapper un BroadcastReciever qui semble être la bonne chose à faire, mais je ne peux pas sembler le faire fonctionner. Quelqu'un peut-il me montrer un tutoriel étape par étape pour ce genre de chose (répétant l'alarme qui déclenche une sorte de code de fond qui déclenche une notification)?android: exécution d'une tâche en arrière-plan en utilisant AlarmManager

TIA

+0

Montrez-nous ce que vous avez essayé, avec des détails sur la façon exactement il échoue. –

+0

Mes tutoriels sont dans les livres (désolé!). Peut-être que la page 'WakefulIntentService' et le projet de démonstration aideront: http://github.com/commonsguy/cwac-wakeful – CommonsWare

+0

Partagez le code s'il vous plaît, je suis en train de mourir! –

Répondre

31

Voici un exemple complet: http://android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/

Le modèle cet exemple utilise, et que j'ai trouvé qui semble bien fonctionner, est d'utiliser un récepteur de démarrage pour configurer le AlarmManager (et bien sûr également vérifier pour démarrer le sondage de votre principale Activité aussi, dans le cas où votre application est installée et que le système ne soit pas démarré) et ont le AlarmManager envoyer un intention pour un autre récepteur: http://android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/src/com/manning/aip/dealdroid/DealBootReceiver.java

Et puis de la AlarmReceiver démarrer une IntentService: http://android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/src/com/manning/aip/dealdroid/DealAlarmReceiver.java

À partir de votre IntentService puis faites votre appel réseau au sondage pour les données, ou tout ce que vous devez faire. IntentService met automatiquement votre travail dans un thread d'arrière-plan, il est très pratique: http://android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/src/com/manning/aip/dealdroid/DealService.java

Vérifiez la documentation pour ces classes aussi, beaucoup d'en là-dedans. L'inconvénient avec cet exemple est qu'il ne gère pas l'écart de serrure de sillage (l'excellent code CommonsWare le fait si vous en avez besoin), mais il peut vous donner plus d'idées sur la façon de résoudre le problème. interroger en utilisant AlarmManager et Service "trucs.

MISE À JOUR: le code est maintenant ici: https://github.com/charlieCollins/android-in-practice

+0

Merci, c'était très utile. – rpcutts

+0

Cette réponse semble assez proche de ce que j'ai fait. Devrait travailler pour vous les gens. – mtmurdock

+2

Vous pouvez placer un WakeLock sur IntentService pour vous assurer que le téléphone ne se met pas en veille dès que l'onReceive a été exécuté. Scratch que, il suffit de lire votre note d'avertissement ... – charroch