Question

J'ai un service qui télécharge un fichier. Une fois le téléchargement terminé, je voudrais mettre à jour ma liste « fichiers téléchargés » dans mon Activity, mais seulement si le Activity est en cours d'exécution. Je ne veux pas le Activity pour commencer si elle est pas déjà en cours d'exécution.

J'espérais que je pouvais le faire en faisant une nouvelle Intent avec un certain drapeau spécial.

Quelqu'un a une idée comment je peux y parvenir? Un petit exemple de code peut-être?

Était-ce utile?

La solution

Vous pouvez créer nouvelle instance de BroadcastReceiver et faire quelque chose le long de ces lignes sur votre méthode onResume () de l'activité:

registerReceiver(myReceiver, new IntentFilter(DownloadService.ACTION_FILE_DOWNLOADED));

Après cela, remplacer la méthode OnReceive () de myReceiver pour appeler une fonction qui met à jour le composant que vous voulez:

@Override 
public void onReceive(Context context, Intent intent) {
...
    updateViewWithData(service.getNewFileData());
...
}

Sur votre méthode OnPause () de l'activité, tout désenregistrer le récepteur:

unregisterReceiver(myReceiver);

J'espère que cela vous aidera, ne hésitez pas à demander s'il y a quelque chose pas clair.

Autres conseils

La bonne façon de le faire est de lier votre activité « Les fichiers téléchargés » au service. Lorsque vous liez le service, dans la fonction onServiceConnected, enregistrer un rappel Binder. Ensuite, chaque fois que vous avez de nouvelles données disponibles, les appels de service juste que le rappel. Si l'activité ne fonctionne pas, la liste de rappel sur le côté service sera vide, donc il ne sera pas informer votre activité.

Pour un exemple de cette approche, jetez un oeil à RemoteService.java dans Android SDK:

samples \ ApiDemos \ src \ com \ exemple \ android \ api \ app \

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top