2013-07-02 15 views
5

Mam usługę Android. Chcę wykonać pewne zadanie, gdy użytkownik zmieni aplikację. Czy istnieje transmisja lub wydarzenie, których mogę słuchać.Android: Wykryj aktywność/zmiana aplikacji Wydarzenia

Jeśli odpytywanie jest jedynym rozwiązaniem, czy ktoś może zaproponować dobrą technikę wyborczą.

Dzięki.

+0

należy otworzyć to pytanie dla Bounty. Moja odpowiedź wyraźnie nie jest odpowiedzią wartą akceptacji, jestem też ciekawa możliwych rozwiązań. –

Odpowiedz

1

Można wyróżnić aplikacji poprzez odpytywanie na górę działalności:

private String lastPackageName; 

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; 
String packageName = componentInfo.getPackageName(); 

if(lastPackageName != packageName){ 
    //Probably application changed 
} 

lastPackageName = packageName; 

Ale to będzie do ciebie, jak często można sondować do tych informacji .. można spróbować odpytywanie tej informacji każdy użytkownik naciska czas z powrotem , przyciski do domu lub prasy na ekranie. Ale oczywiście będzie to za dużo i zła technika wyborcza.

Wygląda na to pytanie zwrócono się już wcześniej i nie dostał żadnej wystarczającą odpowiedź: How to be notified when foreground (top) activity (application) changes

Źródło: https://stackoverflow.com/a/4753333/1276374

+4

"Możesz wypróbować odpytywanie dla tych informacji za każdym razem, gdy użytkownik naciśnie przycisk, przyciski home lub prasy na ekranie" - usługa nie wykrywa żadnego z tych rzeczy. – CommonsWare

-2

Sprawdź w serwisie Android Developers pod adresem Notifications document. Możesz wyświetlać Powiadomienia podczas zmiany Łączności Internetowej lub podczas Restartu Urządzenia lub podczas Zrzutu Urządzenia.