2016-12-23 21 views
8

Chcę wyświetlać powiadomienia użytkownikowi tylko wtedy, gdy aplikacja nie znajduje się na pierwszym planie. Tu jest mój publiczny klasa MyFirebaseMessagingService rozciągaJak sprawdzić czy aplikacja jest na pierwszym planie z usługi?

FirebaseMessagingService { 
    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     if(applicationInForeground()) { 
      Map<String, String> data = remoteMessage.getData(); 
      sendNotification(data.get("title"), data.get("detail")); 
     } 

    } 

potrzebę wdrożenia applicationInForeground() metoda

+1

spójrz na to http://stackoverflow.com/questions/2166961/determining-the-current-foreground-application-from-a-background-task-or-service –

+0

możesz użyć wywołań cyklu życia Activity, oraz wyślij transmisje do serwisu, gdy przejdziesz do BG/FG –

+0

Ile aktywności używasz w aplikacji? –

Odpowiedz

11

można sterować systemem procesów aplikacji z Android usługa systemowa. Wypróbuj to:

private boolean applicationInForeground() { 
    ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningAppProcessInfo> services = activityManager.getRunningAppProcesses(); 
    boolean isActivityFound = false; 

    if (services.get(0).processName 
      .equalsIgnoreCase(getPackageName())) { 
     isActivityFound = true; 
    } 

    return isActivityFound; 
} 

Powodzenia.

+0

Witam, jestem nowicjuszem z Androidem. Mam do czynienia z tym samym problemem, ale utknąłem na tym, jak zaimportować metodę getPackageName(). Czy funkcja getPackageName() pochodzi z kontekstu? Jak uzyskać dostęp do kontekstu, gdy jestem w służbie? –

+0

I moje kolejne pytanie, czy ten kod będzie działać na Androidzie jellybean do Androida oreo? Dziękujemy –

+0

Ta funkcja nie działa na urządzeniu z systemem Android 7.0. –

11

Podczas konferencji Google I/O 2016, wygłosiłem wykład, w którym jednym z tematów było wykrycie, czy Twoja aplikacja jest na pierwszym planie, jak Firebase. Możesz użyć do tego celu ActivityLifecycleCallbacks, zwiększając licznik dla każdego działania w aplikacji, które zaczyna, a następnie zmniejszając go dla każdego zatrzymanego działania. Jeśli licznik ma wartość> 1, Twoja aplikacja znajduje się na pierwszym planie. Odpowiednią część wykładu można obejrzeć na YouTube here.

+0

Dziękuję bardzo za udostępnienie tego filmu! – Sunny

+1

@ doug-stevenson dlaczego nie ujawniasz tej metody w FirebaseMessagingService, aby programiści z Androidem mieli lepsze życie? Co więcej, dlaczego na com.google.firebase: ** nie ma otwartego źródła? – rashtao

+0

Robię to poprzez słabe referencje, [jak to] (https://stackoverflow.com/a/49181737/4269149), jakie są twoje przemyślenia na ten temat? –