2013-04-16 24 views
11

Przeszukałem stackoverflow na to pytanie i stwierdziliśmy: Android, Detect when other apps are launched i Reliable way to detect application launch from home/desktop?, jakiego rodzaju odpowiedzi na moje pytanie, ale to jeszcze nie wystarczy.Wykrywanie android Aktywny uruchamia

Co chcę zrobić Chcę utworzyć widget/app, który pokazuje użytkownikowi urządzenia listę ostatnich aplikacji oraz lista najczęściej używanych aplikacji.

Problem W jaki sposób mogę uzyskać dokładne dane o aplikacjach, aby utworzyć listę najczęściej używanych aplikacji.

Informacje podstawowe

  • Mam kompilacji mój własny system operacyjny Android (4.2 based) kod, więc mam dostęp do wszystkiego.
  • Rozwijam także program uruchamiający.
  • Musi przejść przez CTS i być zatwierdzonym przez Google.
  • Mogę utworzyć aplikację z uprawnieniami systemowymi.
  • Wiem, że może to być problem z bezpieczeństwem dla Google.

Niektóre rozwiązania

niedawnej aplikacji można znaleźć poprzez ActityManager, metody getRecentApps, więc teraz problemu tam.

Szukałem w internecie na ten i już znaleźć następujące rozwiązania:

  1. Użyj usługi kwerendy activityManager, metodę getRunningTasks co X sekund i zbudować listę (Niewłaściwe informacje, również przy użyciu dużo batery).
  2. Użyj logcat aby uzyskać te informacje (wydaje się hack do mnie, potrzebuje uprawnień systemowych)
  3. Zmiana sama w celu uzyskania tych informacji (najprawdopodobniej nie testów CTS)
  4. Użyj wyrzutni activityManager aby zweryfikować aplikacje, które zostały uruchomione (pomija aplikacje uruchomione w innych aplikacjach)

Coś jeszcze przegapiłem?

Dzięki z góry Tiago Costa

+0

wy dość bardzo przygwoździł to z listą wszystkich 4 opcji. Mój preferowany używa '(ActivityManager) this.getSystemService (ACTIVITY_SERVICE);' – srf

+0

Dziękuję za odpowiedź, mam zamiar wypróbować je wszystkie i zobaczyć, który z nich działa najlepiej. Dzięki jeszcze raz. –

+0

logcat nie działa z systemem Android 4.2 i późniejsze, chyba że masz uprawnienia root'a, zobacz https://groups.google.com/forum/?fromgroups=#!topic/android-developers/6U4A5irWang – mattlaabs

Odpowiedz

1

Android Domyślna implementacja dialogowe Najnowsze aplikacje najlepiej odniesienia dla Ciebie, look here..check reloadButtons()

final ActivityManager am = (ActivityManager) 
       context.getSystemService(Context.ACTIVITY_SERVICE); 
     final List<ActivityManager.RecentTaskInfo> recentTasks = 
       am.getRecentTasks(MAX_RECENT_TASKS, ActivityManager.RECENT_IGNORE_UNAVAILABLE); 

Można spróbować w podobny sposób ..

+0

Dziękuję za komentarz, próbowałem wszystkich 4 kroków i poszedłem z wyłapaniem wywołań startappplication w launcherze. Ma prawie doskonałe informacje i nie ma dodatkowej obróbki. –

+0

Czy możesz określić "prawie idealny"? Czego ci brakuje? –

+0

Aplikacje uruchamiane w ramach innych działań, które nie są moim programem uruchamiającym. Ponieważ większość ludzi uruchamia działania za pomocą programu uruchamiającego, służy to mojemu celowi. –