166 votes

Android: comment vérifier si l'activité est en cours?

Existe-t-il un moyen simple de déterminer si une activité donnée est active ou non? Je veux faire certaines choses en fonction de l'activité qui est active. par exemple:

 if(activityrunning= activity1)
//do this
else if (activityrunning= activity2)
//do something else
 

247voto

siliconeagle Points 2292

vous pouvez utiliser une variable statique au sein de l'activité.

class MyActivity extends Activity {
     static boolean active = false;

      @Override
      public void onStart() {
         super.onStart();
         active = true;
      } 

      @Override
      public void onStop() {
         super.onStop();
         active = false;
      }
}

le seul piège est que si vous l'utilisez dans deux activitys que le lien à l'autre, puis onStop le premier est parfois appelé après le démarrage en seconde. Donc, les deux pourrait être vrai brièvement.

en fonction de ce que vous essayez de faire (mise à jour de l'actuel activityform un service?). vous pouvez simplement vous inscrire statique auditeur dans le service en vous activitys méthode onStart puis la bonne écouteur sera disponible lors de votre service souhaite mettre à jour l'INTERFACE utilisateur.

45voto

Xenione Points 613

Je pense plus clair comme ça:

   public boolean isRunning(Context ctx) {
        ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE);

        for (RunningTaskInfo task : tasks) {
            if (ctx.getPackageName().equalsIgnoreCase(task.baseActivity.getPackageName())) 
                return true;                                  
        }

        return false;
    }
 

21voto

Nepster Points 893

Partagé Préférences peut être utilisée pour partager des variables avec les autres activités et services à partir d'une application

    public class example extends Activity {

    @Override
    protected void onStart() {
        super.onStart();

        // Store our shared preference
        SharedPreferences sp = getSharedPreferences("OURINFO", MODE_PRIVATE);
        Editor ed = sp.edit();
        ed.putBoolean("active", true);
        ed.commit();
    }

    @Override
    protected void onStop() {
        super.onStop();

        // Store our shared preference
        SharedPreferences sp = getSharedPreferences("OURINFO", MODE_PRIVATE);
        Editor ed = sp.edit();
        ed.putBoolean("active", false);
        ed.commit();

    }
}

L'utilisation partagée des préférences. Il est le plus fiable des informations d'état, moins d'application de l'interrupteur/détruire des questions, nous sauve de demander encore une autre permission, et il nous donne plus de contrôle, afin de décider quand notre activité est en fait le plus haut. voir les détails ici abd ici aussi

9voto

kkudi Points 616

C'est le code pour vérifier si un service est en cours d'exécution. Je suis assez sûr qu'il peut travailler pour une activité trop aussi longtemps que vous le changement getRunningServices avec getRunningAppProcesses() ou getRunningTasks(). Jetez un oeil ici http://developer.android.com/reference/android/app/ActivityManager.html#getRunningAppProcesses()

Variation Des Constantes.PACKAGE et Constantes.BACKGROUND_SERVICE_CLASS en conséquence

    public static boolean isServiceRunning(Context context) {

    Log.i(TAG, "Checking if service is running");

    ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);

    List<RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);

    boolean isServiceFound = false;

    for (int i = 0; i < services.size(); i++) {

        if (Constants.PACKAGE.equals(services.get(i).service.getPackageName())){

            if (Constants.BACKGROUND_SERVICE_CLASS.equals(services.get(i).service.getClassName())){
                isServiceFound = true;
            }
        }
    }

    Log.i(TAG, "Service was" + (isServiceFound ? "" : " not") + " running");

    return isServiceFound;

}

4voto

alyon2002 Points 81

merci kkudi! J'ai pu adapter votre réponse pour travailler pour une activité ... voici ce qui a fonctionné dans mon application ..

 public boolean isServiceRunning() { 

ActivityManager activityManager = (ActivityManager)Monitor.this.getSystemService (Context.ACTIVITY_SERVICE); 
    List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE); 
    isServiceFound = false; 
    for (int i = 0; i < services.size(); i++) { 
        if (services.get(i).topActivity.toString().equalsIgnoreCase("ComponentInfo{com.lyo.AutoMessage/com.lyo.AutoMessage.TextLogList}")) {
            isServiceFound = true;
        }
    } 
    return isServiceFound; 
} 
 

cet exemple vous donnera un vrai ou un faux si topActivity correspond à ce que l'utilisateur fait. Donc, si l’activité que vous recherchez n’est pas affichée (c’est-à-dire onPause), vous n’obtiendrez aucune correspondance. Pour ce faire, vous devez également ajouter l'autorisation à votre manifeste.

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

J'espère que cela a été utile!

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