Informacje o powiadomieniach

Powiadomienie to wiadomość, którą Android wyświetla poza interfejsem aplikacji, aby przypominać użytkownikowi o czymś, informować go o wiadomościach od innych osób lub przekazywać inne aktualne informacje z aplikacji. Użytkownicy mogą kliknąć powiadomienie, aby otworzyć aplikację lub wykonać działanie bezpośrednio z poziomu powiadomienia.

Na tej stronie znajdziesz omówienie miejsc, w których wyświetlają się powiadomienia, oraz dostępnych funkcji. Aby zacząć tworzyć powiadomienia, przeczytaj artykuł Tworzenie powiadomienia.

Więcej informacji o projektowaniu powiadomień i wzorcach interakcji znajdziesz w przewodniku Projektowanie powiadomień.

Wygląd na urządzeniu

Powiadomienia automatycznie wyświetlają się użytkownikom w różnych miejscach i formatach. Powiadomienie pojawia się jako ikona na pasku stanu, bardziej szczegółowy wpis w obszarze powiadomień i plakietka na ikonie aplikacji.

Działanie na różnych urządzeniach

Powiadomienia domyślnie wyświetlają się też na sparowanych urządzeniach do noszenia. W sytuacjach, gdy treść powiadomienia jest istotna tylko dla urządzenia źródłowego, użyj setLocalOnly(). Przykładem jest powiadomienie potwierdzające zakończenie pobierania multimediów. Więcej wskazówek dotyczących powiadomień na Wear OS znajdziesz w artykule Wskazówki dotyczące powiadomień na Wear OS.

Pasek stanu i obszar powiadomień

Gdy wyślesz powiadomienie, najpierw pojawi się ono jako ikona na pasku stanu.

Rysunek 1. Ikony powiadomień pojawiają się po lewej stronie paska stanu.

Użytkownicy mogą przesunąć palcem w dół na pasku stanu, aby otworzyć obszar powiadomień, w którym mogą wyświetlić więcej szczegółów i wykonać działania związane z powiadomieniem.

Rysunek 2. Powiadomienia w obszarze powiadomień.

Użytkownicy mogą przeciągnąć powiadomienie w dół w obszarze powiadomień, aby wyświetlić rozszerzony widok, który zawiera dodatkowe treści i przyciski działań (jeśli są dostępne). Od Androida 13 ten rozszerzony widok zawiera przycisk, który umożliwia użytkownikom zatrzymanie aplikacji z usługami działającymi na pierwszym planie.

Powiadomienie pozostaje widoczne w obszarze powiadomień, dopóki nie zostanie zamknięte przez aplikację lub użytkownika.

Powiadomienie z ostrzeżeniem

Począwszy od Androida 5.0 powiadomienia mogą przez chwilę pojawiać się w pływającym oknie zwanym powiadomieniem z ostrzeżeniem. Zwykle dotyczy to ważnych powiadomień, o których użytkownik musi się natychmiast dowiedzieć. Powiadomienie z ostrzeżeniem pojawia się tylko wtedy, gdy urządzenie jest odblokowane.

Rysunek 3. Powiadomienie z ostrzeżeniem pojawia się przed aplikacją działającą na pierwszym planie.

Powiadomienie z ostrzeżeniem pojawia się, gdy aplikacja wyśle powiadomienie. Po chwili znika, ale pozostaje widoczne w obszarze powiadomień.

Oto warunki, które mogą spowodować wyświetlenie powiadomienia z ostrzeżeniem:

  • Aktywność użytkownika jest w trybie pełnoekranowym, np. gdy aplikacja używa fullScreenIntent.

  • Powiadomienie ma wysoki priorytet i używa dzwonków lub wibracji na urządzeniach z Androidem 7.1 (poziom interfejsu API 25) lub starszym.

  • Kanał powiadomień ma wysoki priorytet na urządzeniach z Androidem 8.0 (poziom interfejsu API 26) lub nowszym.

Ekran blokady

Począwszy od Androida 5.0 powiadomienia mogą pojawiać się na ekranie blokady.

Możesz programowo określić, czy powiadomienia wysyłane przez aplikację mają być wyświetlane na bezpiecznym ekranie blokady, a jeśli tak, to jaki poziom szczegółowości ma być widoczny.

Użytkownicy mogą w ustawieniach systemu wybrać poziom szczegółowości widoczny w powiadomieniach na ekranie blokady lub wyłączyć wszystkie powiadomienia na ekranie blokady. Począwszy od Androida 8.0 użytkownicy mogą wyłączać i włączać powiadomienia na ekranie blokady dla każdego kanału powiadomień.

Rysunek 4. Powiadomienia na ekranie blokady z ukrytą treścią poufną.

Więcej informacji znajdziesz w artykule Ustawianie widoczności na ekranie blokady.

Plakietka ikony aplikacji

W obsługiwanych programach uruchamiających na urządzeniach z Androidem 8.0 (poziom interfejsu API 26) lub nowszym ikony aplikacji wskazują nowe powiadomienia za pomocą kolorowej plakietki zwanej kropką powiadomienia na ikonie programu uruchamiającego.

Użytkownicy mogą nacisnąć i przytrzymać ikonę aplikacji, aby wyświetlić powiadomienia z tej aplikacji. Użytkownicy mogą odrzucać powiadomienia lub wykonywać działania z poziomu tego menu, podobnie jak w przypadku obszaru powiadomień.

Rysunek 5. Plakietki powiadomień i menu wyświetlane po naciśnięciu i przytrzymaniu.

Więcej informacji o tym, jak działają plakietki, znajdziesz w artykule Zmienianie plakietki powiadomienia.

Urządzenia z Wear OS

Jeśli użytkownik ma sparowane urządzenie z Wear OS, wszystkie powiadomienia będą się na nim automatycznie wyświetlać, w tym rozwijane szczegóły i przyciski działań.

Możesz ulepszyć wrażenia użytkownika, dostosowując wygląd powiadomień na urządzeniach do noszenia i udostępniając różne działania, w tym sugerowane odpowiedzi i głosowe wprowadzanie tekstu. Więcej informacji znajdziesz w artykule o dodawaniu do powiadomienia funkcji specyficznych dla urządzeń do noszenia.

Rysunek 6. Powiadomienia automatycznie wyświetlają się na sparowanym urządzeniu z Wear OS.

Struktura powiadomienia

Wygląd powiadomienia jest określany przez szablony systemowe, a aplikacja definiuje zawartość każdej części szablonu. Niektóre szczegóły powiadomienia są widoczne tylko w widoku rozwiniętym.

Rysunek 7. Powiadomienie z podstawowymi informacjami.

Najczęstsze części powiadomienia są wskazane na rysunku 7:

  1. Mała ikona: wymagana; ustawiana za pomocą setSmallIcon().
  2. Nazwa aplikacji: podawana przez system.
  3. Sygnatura czasowa: podawana przez system, ale możesz ją zastąpić za pomocą setWhen() lub ukryć za pomocą setShowWhen(false).
  4. Duża ikona: opcjonalna; zwykle używana tylko w przypadku zdjęć kontaktowych. Nie używaj jej jako ikony aplikacji. Ustawiana za pomocą setLargeIcon().
  5. Tytuł: opcjonalny; ustawiany za pomocą setContentTitle().
  6. Tekst: opcjonalny; ustawiany za pomocą setContentText().

Zdecydowanie zalecamy używanie szablonów systemowych, aby zapewnić prawidłową zgodność projektu na wszystkich urządzeniach. W razie potrzeby możesz utworzyć niestandardowy układ powiadomienia layout.

Więcej informacji o tworzeniu powiadomień z tymi i innymi funkcjami znajdziesz w artykule Tworzenie powiadomienia.

Działania powiadomień

Chociaż nie jest to wymagane, dobrym rozwiązaniem jest, aby każde powiadomienie po kliknięciu otwierało odpowiednią aktywność aplikacji. Oprócz domyślnego działania powiadomienia możesz dodać przyciski działań, które wykonują zadanie związane z aplikacją z poziomu powiadomienia – często bez otwierania aktywności – jak pokazano na rysunku 8.

Rysunek 8. Powiadomienie z przyciskami działań.

Począwszy od Androida 7.0 (poziom interfejsu API 24) możesz dodać działanie, które umożliwia odpowiadanie na wiadomości lub wpisywanie innego tekstu bezpośrednio z poziomu powiadomienia.

Począwszy od Androida 10 (poziom interfejsu API 29) platforma może automatycznie generować przyciski działań z sugerowanymi działaniami opartymi na intencjach.

Dodawanie przycisków działań zostało opisane w artykule Tworzenie powiadomienia.

Wymagaj odblokowania urządzenia

Użytkownicy mogą widzieć działania powiadomień na ekranie blokady urządzenia. Jeśli działanie powiadomienia powoduje, że aplikacja uruchamia aktywność lub wysyła bezpośrednią odpowiedź, użytkownicy muszą odblokować urządzenie, zanim aplikacja będzie mogła wywołać to działanie powiadomienia.

W Androidzie 12 (poziom interfejsu API 31) i nowszych możesz skonfigurować działanie powiadomienia tak, aby aplikacja mogła je wywołać tylko wtedy, gdy urządzenie jest odblokowane, niezależnie od tego, jaki przepływ pracy uruchamia to działanie. Ta opcja dodaje dodatkową warstwę bezpieczeństwa do powiadomień na zablokowanych urządzeniach.

Aby wymagać odblokowania urządzenia, zanim aplikacja wywoła dane działanie powiadomienia , przekaż wartość true do setAuthenticationRequired() podczas tworzenia działania powiadomienia, jak pokazano w tym fragmencie kodu:

Kotlin

val moreSecureNotification = Notification.Action.Builder(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build()

Java

Notification moreSecureNotification = new Notification.Action.Builder(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build();

Rozwijane powiadomienie

Domyślnie tekst powiadomienia jest skracany, aby zmieścił się w jednym wierszu. Jeśli chcesz, aby powiadomienie było dłuższe, możesz włączyć większy obszar tekstowy, który można rozwinąć, stosując dodatkowy szablon, jak pokazano na rysunku 9.

Rysunek 9. Rozwijane powiadomienie z długim tekstem.

Możesz też utworzyć rozwijane powiadomienie z obrazem, w stylu skrzynki odbiorczej, z rozmową na czacie lub z elementami sterującymi odtwarzaniem multimediów. Więcej informacji znajdziesz w artykule Tworzenie rozwijanego powiadomienia.

Aktualizacje i grupy powiadomień

Aby uniknąć zalewania użytkowników wieloma lub zbędnymi powiadomieniami, gdy masz dodatkowe aktualizacje, zaktualizuj istniejące powiadomienie zamiast wysyłać nowe lub użyj powiadomienia w stylu skrzynki odbiorczej, aby wyświetlać aktualizacje rozmów.

Jeśli jednak musisz wysłać kilka powiadomień, rozważ zgrupowanie ich w grupę dostępną w Androidzie 7.0 i nowszych.

Grupa powiadomień umożliwia zwinięcie kilku powiadomień w jeden post w obszarze powiadomień z podsumowaniem. Użytkownik może stopniowo rozwijać grupę powiadomień i każde powiadomienie w niej, aby uzyskać więcej szczegółów, jak pokazano na rysunku 10.

Rysunek 10. Zwinięta i rozwinięta grupa powiadomień.

Aby dowiedzieć się, jak dodawać powiadomienia do grupy, przeczytaj artykuł Tworzenie grupy powiadomień.

Kanały powiadomień

Począwszy od Androida 8.0 (poziom interfejsu API 26) wszystkie powiadomienia muszą być przypisane do kanału, w przeciwnym razie się nie wyświetlą. Dzięki temu użytkownicy mogą wyłączyć konkretne kanały powiadomień w aplikacji zamiast wszystkich powiadomień. Użytkownicy mogą kontrolować opcje wizualne i dźwiękowe każdego kanału w ustawieniach systemu Android, jak pokazano na rysunku 11. Użytkownicy mogą też nacisnąć i przytrzymać powiadomienie, aby zmienić zachowanie powiązane z danym kanałem.

Na urządzeniach z Androidem 7.1 (poziom interfejsu API 25) lub starszym użytkownicy mogą zarządzać powiadomieniami tylko w przypadku poszczególnych aplikacji. W Androidzie 7.1 i starszych każda aplikacja ma tylko 1 kanał.

Rysunek 11. Ustawienia powiadomień aplikacji Zegar i jednego z jej kanałów.

Aplikacja może mieć osobne kanały dla każdego typu powiadomienia. Aplikacja może też tworzyć kanały powiadomień w odpowiedzi na wybory użytkowników. Możesz na przykład skonfigurować osobne kanały powiadomień dla każdej grupy rozmów utworzonej przez użytkownika w aplikacji do obsługi wiadomości.

Na kanale określasz też poziom ważności powiadomień w Androidzie 8.0 i nowszych, więc wszystkie powiadomienia wysyłane na ten sam kanał powiadomień mają takie samo zachowanie. Opisano to w następnej sekcji.

Więcej informacji znajdziesz w artykule Tworzenie kanałów powiadomień i zarządzanie nimi.

Ważność powiadomień

Android używa ważności powiadomienia, aby określić, jak bardzo powiadomienie ma przeszkadzać użytkownikowi wizualnie i dźwiękowo. Im większa ważność powiadomienia, tym bardziej przeszkadza ono użytkownikowi.

W Androidzie 7.1 (poziom interfejsu API 25) i starszym ważność powiadomienia jest określana przez jego priority.

W Androidzie 8.0 (poziom interfejsu API 26) i nowszym ważność powiadomienia jest określana przez importance kanału, na którym zostało opublikowane. Użytkownicy mogą zmienić ważność kanału powiadomień w ustawieniach systemu, jak pokazano na rysunku 12.

Rysunek 12. Użytkownicy mogą zmieniać ważność każdego kanału w Androidzie 8.0 i nowszych.

Możliwe poziomy ważności i powiązane z nimi zachowania powiadomień:

  • Pilne: wydaje dźwięk i pojawia się jako powiadomienie z ostrzeżeniem.

  • Wysokie: wydaje dźwięk.

  • Średnie: nie wydaje dźwięku.

  • Niskie: nie wydaje dźwięku i nie pojawia się na pasku stanu.

Wszystkie powiadomienia, niezależnie od ważności, pojawiają się w nieprzeszkadzających miejscach w interfejsie systemu, np. w obszarze powiadomień i jako plakietka na ikonie programu uruchamiającego. Możesz jednak zmienić wygląd plakietki powiadomienia.

Więcej informacji znajdziesz w artykule o ustawianiu ważności.

Tryb Nie przeszkadzać

Począwszy od Androida 5.0 (poziom interfejsu API 21) użytkownicy mogą włączyć tryb Nie przeszkadzać, który wycisza dźwięk i wibracje wszystkich powiadomień. Powiadomienia nadal wyświetlają się w interfejsie systemu jak zwykle, chyba że użytkownik określi inaczej.

W trybie Nie przeszkadzać dostępne są 3 poziomy:

  • Całkowite wyciszenie: blokuje wszystkie dźwięki i wibracje, w tym alarmy, muzykę, filmy i gry.
  • Tylko alarmy: blokuje wszystkie dźwięki i wibracje z wyjątkiem alarmów.
  • Tylko priorytetowe: użytkownicy mogą skonfigurować, które kategorie systemowe mogą im przeszkadzać, np. tylko alarmy, przypomnienia, wydarzenia, połączenia lub wiadomości. W przypadku wiadomości i połączeń użytkownicy mogą filtrować według nadawcy lub dzwoniącego, jak pokazano na rysunku 13.

Rysunek 13. Użytkownicy mogą zezwalać na powiadomienia na podstawie kategorii systemowych (po lewej) oraz nadawcy lub dzwoniącego (po prawej).

W Androidzie 8.0 (poziom interfejsu API 26) i nowszym użytkownicy mogą też zezwalać na powiadomienia z kategorii specyficznych dla aplikacji – zwanych też kanałami – przez zastąpienie trybu Nie przeszkadzać w przypadku poszczególnych kanałów. Na przykład aplikacja płatnicza może mieć kanały powiadomień związanych z wypłatami i wpłatami. W trybie priorytetowym użytkownik może zezwolić na powiadomienia o wypłatach, powiadomienia o wpłatach lub oba te typy powiadomień.

Na urządzeniach z Androidem 7.1 (poziom interfejsu API 25) lub starszym użytkownicy mogą zezwalać na powiadomienia w przypadku poszczególnych aplikacji, a nie poszczególnych kanałów.

Aby skonfigurować powiadomienia pod kątem tych ustawień użytkownika, musisz ustawić kategorię systemową.

Powiadomienia o usługach działających na pierwszym planie

Gdy aplikacja uruchamia usługę działającą na pierwszym planie—a Service działającą w tle, która jest długotrwała i widoczna dla użytkownika, np. odtwarzacz multimediów – wymagane jest powiadomienie. Tego powiadomienia nie można zamknąć jak innych powiadomień. Aby usunąć powiadomienie, należy zatrzymać usługę lub usunąć ją ze stanu działania na pierwszym planie.

Więcej informacji znajdziesz w artykule Usługi działające na pierwszym planie. Jeśli tworzysz odtwarzacz multimediów, przeczytaj też artykuł Odtwarzanie multimediów w tle.

Zachowania powiadomień

Android 16.0, poziom interfejsu API 36

Powiadomienia są teraz automatycznie grupowane w imieniu aplikacji.

Automatycznie grupowane są te powiadomienia:

  • Powiadomienia bez podsumowania
  • Powiadomienia bez powiadomień podrzędnych
  • Powiadomienia z pojedynczym lub niewielką liczbą powiadomień podrzędnych

Android 15.0, poziom interfejsu API 35

Okres oczekiwania

W Androidzie 15 wprowadziliśmy funkcję wyciszania powiadomień, która ma na celu poprawę wrażeń użytkownika w przypadku powiadomień przychodzących w szybkim tempie. Ta funkcja zmniejsza częstotliwość wyświetlania, głośność dźwięku i intensywność wibracji w przypadku powtarzających się powiadomień na maksymalnie 2 minuty.

Wyciszanie nie dotyczy powiadomień krytycznych, które wymagają dźwięku i czujnika haptycznego, aby przyciągnąć uwagę. Użytkownik może wyłączyć wyciszanie powiadomień w Ustawieniach.

Rysunek 9. Ustawienia wyciszania powiadomień.

Oto przykład, jak znaleźć ustawienia wyciszania powiadomień:

Kotlin

val intent = Intent(Settings.ACTION_MANAGE_ADAPTIVE_NOTIFICATIONS)
val pendingIntent =
            PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)

Java

Intent intent = new Intent(Settings.ACTION_MANAGE_ADAPTIVE_NOTIFICATIONS)
PendingIntent pendingIntent =
            PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)