41 votes

Notifier l'activité du service

J'essaie de lancer un Service de mon Activity pour surveiller les changements sur une page web, c'est une application privée donc je ne me préoccupe pas de la vie de la batterie...

Mais j'aimerais faire passer les données de mon Service à mon Activity ... Je n'arrive pas à trouver un moyen d'appeler la fonction Activity de mon Service . Comment puis-je y parvenir ?

47voto

CommonsWare Points 402670

Comme l'a indiqué Alex, vous pouvez vous lier au service et lui transmettre une sorte d'écouteur ou de rappel à utiliser lors d'événements.

Ou bien, vous pouvez utiliser une diffusion Intent en utilisant peut-être des méthodes comme setPackage() sur le Intent pour limiter la portée de la diffusion.

Ou bien, vous pouvez utiliser createPendingResult() pour créer un PendingIntent que vous passez comme un Intent supplémentaire au service -- le service peut alors utiliser cette PendingIntent pour déclencher onActivityResult() dans votre activité.

Ou bien, vous pouvez utiliser un ResultReceiver .

Ou bien, vous pouvez utiliser un Messenger .

(il est vrai que je n'ai pas essayé ces deux dernières approches, mais je pense qu'elles fonctionneront ici).

4voto

Alex Points 308

Je suppose que cela lien vous sera utile

3voto

Juozas Kontvainis Points 3294

Une autre alternative : si votre service met à jour le fournisseur de contenu, l'activité peut être notifiée via ContentObserver . Cela suffit si votre service télécharge des données à partir du serveur et que vous souhaitez simplement afficher le nouveau contenu dans l'activité.

1voto

vvsueprman Points 11

De façon très désagréable :

1.) Si l'activité n'a pas encore commencé, utilisez alors intent y startActivity mais rappelez-vous intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

2.) Sinon, si l'activité a déjà commencé, vous pouvez écrire votre propre méthode de rappel dans l'activité et enregistrer la méthode dans le service, puis appeler directement la méthode dans le service.

J'espère trouver une solution intelligente.

Je pense que la diffusion fonctionne également bien, vous pouvez écrire une classe interne statique pour recevoir la diffusion et démarrer l'activité. Mais c'est également laid à mon avis.

0voto

Nikhil_Katre Points 351

Le mécanisme ResultReceiver a été expliqué dans un autre post :-. Service API reposant Toutefois, cela ne fonctionnerait pas dans tous les cas. Veuillez vous référer à mon commentaire sur ce post. La diffusion à portée limitée ou le mécanisme PendingIntent semblent plus appropriés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X