197 votes

Android : Comment puis-je obtenir l’activité actuelle de premier plan (d’un service) ?

Y a-t-il une manière android native pour obtenir une référence à l’activité en cours d’exécution d’un service ?

J’ai un service qui s’exécute sur le fond, et je tiens à mettre à jour mon activité actuelle lorsqu’un événement se produit (dans le service). Y a-t-il un moyen facile de le faire (comme j’ai suggéré ci-dessus) ?

148voto

Nelson Ramirez Points 3364

Voici une bonne façon de le faire en utilisant le gestionnaire d'activité. Vous obtiendrez le runningTasks de l'activité de gestionnaire. Il retournera toujours la tâche active en premier. À partir de là, vous pouvez obtenir le topActivity.

Exemple ici

Il y a un moyen facile d'obtenir une liste de tâches en cours d'exécution à partir de la ActivityManager service. Vous pouvez demander un nombre maximum de tâches en cours d'exécution sur le téléphone, et par défaut, la tâche active est retourné en premier.

Une fois que vous avez que vous pouvez obtenir un Nomcomposant objet en demandant la topActivity de votre liste.

Voici un exemple.

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);



     // get the info from the currently running task
     List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1); 

     Log.d("topActivity", "CURRENT Activity ::"
             + taskInfo.get(0).topActivity.getClassName());

     ComponentName componentInfo = taskInfo.get(0).topActivity;
   componentInfo.getPackageName();

Vous aurez besoin de l'autorisation suivante sur votre manifeste:

<uses-permission android:name="android.permission.GET_TASKS"/>

88voto

CommonsWare Points 402670

Est-il un android natif de façon à obtenir une référence à l'instance actuelle de l'Activité d'un service?

Vous ne pouvez pas propre à la "actuellement en cours d'exécution de l'Activité".

J'ai un service qui s'exécute sur le fond, et je voudrais mettre à jour mon Activité actuelle lorsqu'un événement se produit (dans le service). Est-il un moyen facile de le faire (comme je l'ai suggéré ci-dessus)?

  1. Envoyer une diffusion Intent de l'activité -- voici un exemple de projet de démonstration de ce modèle
  2. L'activité offre un PendingIntent (par exemple, via createPendingResult()) que le service appelle
  3. L'activité enregistrer un rappel ou un objet écouteur avec le service via bindService(), et le service de l'appel d'une méthode d'événements sur ce rappel/objet écouteur
  4. Envoyer un ordre de radiodiffusion Intent de l'activité, avec une priorité faible BroadcastReceiver de sauvegarde (pour élever un Notification si l'activité n'est pas à l'écran) -- voici un blog avec plus sur ce modèle

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