2013-05-06 8 views
7

Jestem nowy na Androida. W mojej aplikacji chcę śledzić, ile czasu są używane inne aplikacje (zainstalowane na urządzeniu) (na pierwszym planie).Mierzony czas na aplikacje na Androida

Czy to możliwe? Jeśli tak, to w jaki sposób?

Z góry dziękuję!

+2

Sprawdź, czy link [this] (http://stackoverflow.com/questions/6064137/can-an-android-application-know-when-another-android-application-is-running) może Ci pomóc. – Hemanth

+0

kliknij słowo to ... to hiperłącze :) – Hemanth

Odpowiedz

2

Myślę, że jedynym sposobem, aby to zrobić, jest skorzystanie z usługi w tle i ciągłe wyszukiwanie, która aplikacja jest na pierwszym planie (jest to możliwe za pomocą ActivityManager).

Ale to rozwiązanie jest kosztowne akumulator

4

Pierwszą rzeczą, która jest wymagana, aby być znany jest tu jakie są aplikacje, które są uruchomione na pierwszym planie:

można wykryć obecnie planie/aplikacji w tle z ActivityManager.getRunningAppProcesses() połączenie.

Tak, będzie to wyglądać mniej więcej tak ::

class findForeGroundProcesses extends AsyncTask<Context, Void, Boolean> { 

     @Override 
     protected Boolean doInBackground(Context... params) { 
     final Context context = params[0].getApplicationContext(); 
     return isAppOnForeground(context); 
     } 

     private boolean isAppOnForeground(Context context) { 
     ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
     List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses(); 
     if (appProcesses == null) { 
      return false; 
     } 
     final String packageName = context.getPackageName(); 
     for (RunningAppProcessInfo appProcess : appProcesses) { 
      if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND && appProcess.processName.equals(packageName)) { 
      return true; 
      } 
     } 
     return false; 
     } 
    } 

    // Now you call this like: 
    boolean foreground = new findForeGroundProcesses().execute(context).get(); 

Prawdopodobnie można to sprawdzić także: Determining foreground/background processes.

Do pomiaru czasu potrzebnego do uruchomienia procesu due Oczywiście, można użyć tej metody:

getElapsedCpuTime() 

Patrz tej article.

+0

Dzięki za odpowiedź. Dam temu szansę! – Unnati

Powiązane problemy