2010-11-18 9 views
54

Sono uno sviluppatore Android e desidero scrivere una dichiarazione if nella mia applicazione. In questa dichiarazione voglio verificare se il browser predefinito (browser nel sistema operativo Android) è in esecuzione. Come posso farlo a livello di programmazione?Come posso verificare se un'app funziona su Android?

risposta

102

Aggiungere la classe Helper di seguito:

public class Helper { 

     public static boolean isAppRunning(final Context context, final String packageName) { 
      final ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
      final List<ActivityManager.RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses(); 
      if (procInfos != null) 
      { 
       for (final ActivityManager.RunningAppProcessInfo processInfo : procInfos) { 
        if (processInfo.processName.equals(packageName)) { 
         return true; 
        } 
       } 
      } 
      return false; 
     } 
    } 

Ora è possibile controllare dal codice qui sotto se la vostra applicazione desiderata non è stata avviata:

if (Helper.isAppRunning(YourActivity.this, "com.your.desired.app")) { 
    // App is running 
} else { 
    // App is not running 
} 
+0

Bel pezzo di codice, grazie! –

+2

Thx, ma come vedo ogni volta com.android.browser è in esecuzione. Quando è in primo piano, generalmente è in terza o quarta posizione della lista, altrimenti è ancora nella lista. Quindi questa affermazione ogni volta restituisce vero. Come posso risolvere questo problema? Solo quando il processo recente è browser, deve scrivere "il browser è in esecuzione". – sjor

+1

un campo 'lru' in RunningAppProcessInfo fornirà le informazioni relative del runtime dell'applicazione per ulteriori riferimenti controllare la pagina doc - http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html – dhaval

-1

si può controllare con il seguente metodo

public static boolean isRunning(Context ctx) { 
    ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); 

    List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE); 

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

funziona al di sopra di kitkat? se sì, si prega di fornire il codice ... grazie –

Problemi correlati