Omówienie powiadomień

Powiadomienie to wiadomość wyświetlana przez Androida poza interfejsem aplikacji, aby przekazać użytkownikowi przypomnienia, informacje od innych osób lub inne aktualne informacje z aplikacji. Użytkownicy mogą kliknąć powiadomienie, aby otworzyć aplikację lub wykonać działanie bezpośrednio z powiadomienia.

Na tej stronie znajdziesz omówienie tego, gdzie pojawiają się powiadomienia i dostępne funkcje. Aby zacząć tworzyć powiadomienia, przeczytaj artykuł Tworzenie powiadomienia.

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

Wyświetlenia na urządzeniu

Powiadomienia wyświetlają się użytkownikom automatycznie w różnych miejscach i formatach. Powiadomienie będzie wyświetlane jako ikona na pasku stanu, bardziej szczegółowy wpis w panelu powiadomień oraz plakietka na ikonie aplikacji. Powiadomienia wyświetlają się też na sparowanych urządzeniach do noszenia.

Pasek stanu i szufletkę 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ć panel powiadomień, w którym mogą wyświetlić więcej szczegółów i działać na powiadomieniu.

Rysunek 2. Powiadomienia w schowku powiadomień.

Użytkownicy mogą przeciągnąć powiadomienie w schowku w dół, aby wyświetlić rozszerzone widok, w którym znajdują się dodatkowe treści i przyciski działania (jeśli są dostępne). W Androidzie 13 to rozszerzone widok zawiera przycisk, który umożliwia użytkownikom zatrzymanie aplikacji, która w danym momencie obsługuje usługi na pierwszym planie.

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

Powiadomienie z ostrzeżeniem

Począwszy od Androida 5.0 powiadomienia mogą pojawiać się na chwilę w oknie nakładkowym, zwanym powiadomieniem z poprzednim wyświetleniem. Takie zachowanie jest zwykle związane z ważnymi powiadomieniami, które użytkownik musi znać natychmiast. Powiadomienia te pojawiają się tylko wtedy, gdy urządzenie jest odblokowane.

Rysunek 3. Powiadomienie z ostrzeżeniem pojawi się na pierwszym planie.

Powiadomienie z ostrzeżeniem pojawia się, gdy aplikacja wyśle powiadomienie. Po chwili zniknie, ale jak zwykle będzie widoczne w szufladzie powiadomień.

Warunki, które mogą spowodować wyświetlenie powiadomienia:

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

  • Powiadomienie ma wysoki priorytet i wykorzystuje dzwonek lub wibracje na urządzeniach z Androidem 7.1 (poziom interfejsu API 25) lub starszym.

  • Kanał powiadomień ma duże znaczenie 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 ustawić programowo, czy powiadomienia publikowane przez Twoją aplikację mają być wyświetlane na zabezpieczonym ekranie blokady, a jeśli tak, to na jakim poziomie szczegółowości.

Użytkownicy mogą używać ustawień systemowych, aby 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 ukrytymi treściami poufnymi.

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

Plakietka ikony aplikacji

Na obsługiwanych programach uruchamiających na urządzeniach z Androidem 8.0 (interfejs API na poziomie 26) lub nowszym ikony aplikacji wskazują nowe powiadomienia za pomocą kolorowego oznaczenia, zwanego kropką powiadomienia, na odpowiedniej ikonie programu uruchamiającego.

Użytkownicy mogą nacisnąć i przytrzymać ikonę aplikacji, aby wyświetlić powiadomienia z niej. W tym menu mogą zamknąć powiadomienia lub wykonać związane z nimi czynności w sposób podobny do tego, jak w schowku powiadomień.

Rysunek 5. Plakietki powiadomień i menu dotykowe

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

urządzenia z Wear OS,

Jeśli użytkownik ma sparowane urządzenie z Wear OS, wszystkie powiadomienia (w tym przyciski szczegółów i działania) wyświetlają się automatycznie.

Możesz zwiększyć wygodę korzystania z urządzenia, dostosowując wygląd powiadomień na urządzeniach do noszenia i dodając różne działania, w tym sugerowane odpowiedzi i odpowiedzi na polecenia głosowe. Więcej informacji znajdziesz w artykule o dodawaniu funkcji dotyczących urządzeń do noszenia do powiadomień.

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

Budowa powiadomienia

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

Rysunek 7. powiadomienie z podstawowymi informacjami;

Najczęstsze elementy powiadomienia są oznaczone na rysunku 7 w następujący sposób:

  1. Mała ikona: wymagana; ustaw za pomocą setSmallIcon().
  2. Nazwa aplikacji: podawana przez system.
  3. Znak czasu: jest podawany przez system, ale możesz go zastąpić za pomocą setWhen()lub ukryć za pomocą setShowWhen(false).
  4. Duża ikona: opcjonalna; zwykle używana tylko w przypadku zdjęć kontaktów. Nie używaj go jako ikony aplikacji. Ustaw za pomocą setLargeIcon().
  5. Tytuł: opcjonalny; ustaw za pomocą setContentTitle().
  6. Tekst: opcjonalny; ustaw za pomocą setContentText().

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

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

Działania powiadomień

Chociaż nie jest to wymagane, zalecamy, aby po kliknięciu powiadomienia otwierała się odpowiednia aktywność aplikacji. Oprócz tego domyślnego działania powiadomienia możesz dodać przyciski czynności, które umożliwiają wykonanie zadania związanego z aplikacją z poziomu powiadomienia (często bez otwierania aktywności), jak pokazano na rysunku 8.

Rysunek 8. Powiadomienie z przyciskami poleceń.

Począwszy od Androida 7.0 (interfejs API 24) możesz dodać działanie, aby odpowiedzieć na wiadomości lub wpisać inny tekst bezpośrednio w powiadomieniu.

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

Informacje o dodawaniu przycisków działań znajdziesz 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 uruchomienie przez aplikację aktywności lub wysłanie bezpośredniej odpowiedzi, użytkownik musi 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 w taki sposób, aby aplikacja mogła je wywołać dopiero po odblokowaniu urządzenia, niezależnie od tego, jakie działanie to uruchamia. Ta opcja zapewnia dodatkową ochronę powiadomień na zablokowanych urządzeniach.

Aby wymagać odblokowania urządzenia, zanim aplikacja wywoła daną akcję powiadomienia, podczas tworzenia akcji powiadomienia prześlij parametr true do funkcji setAuthenticationRequired(), 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();

Powiadomienie rozwijane

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

Rysunek 9. Rozwijane powiadomienie z dużym tekstem.

Możesz też utworzyć powiadomienie z możliwością rozwinięcia z obrazem, w stylu skrzynki odbiorczej, z konwersacją na czacie lub z elementami sterowania odtwarzaniem multimediów. Więcej informacji znajdziesz w artykule Tworzenie powiadomienia rozwijanego.

Aktualizacje powiadomień i grupy

Aby uniknąć zalewania użytkowników wieloma lub niepotrzebnymi powiadomieniami, gdy masz dodatkowe informacje, zaktualizuj istniejące powiadomienie zamiast wysyłać nowe. Możesz też użyć powiadomienia w stylu skrzynki odbiorczej, aby wyświetlać aktualizacje rozmowy.

Jeśli jednak konieczne jest wysłanie wielu powiadomień, rozważ pogrupowanie ich w grupę, która będzie dostępna na Androidzie 7.0 i nowszych.

Grupa powiadomień pozwala połączyć wiele powiadomień w jeden wpis w schowku powiadomień z podsumowaniem. Aby uzyskać więcej informacji, użytkownik może rozwinąć grupę powiadomień i poszczególne powiadomienia w niej, 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 (interfejs API na poziomie 26), wszystkie powiadomienia muszą być przypisane do kanału, w przeciwnym razie nie będą się wyświetlać. Dzięki temu użytkownicy mogą wyłączyć określone kanały powiadomień w aplikacji zamiast wyłączać wszystkie powiadomienia. Użytkownicy mogą kontrolować opcje wizualne i dźwiękowe poszczególnych kanałów w ustawieniach systemu Android, jak pokazano na rysunku 11. Użytkownicy mogą też nacisnąć i przytrzymać powiadomienie, aby zmienić zachowanie powiązanego kanału.

Na urządzeniach z Androidem 7.1 (poziom interfejsu API 25) lub starszym użytkownicy mogą zarządzać powiadomieniami tylko w poszczególnych aplikacjach. 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ć oddzielne kanały dla każdego typu powiadomień, które wysyła. 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 lub nowszym, dzięki czemu wszystkie powiadomienia publikowane na tym samym kanale powiadomień zachowują się tak samo. Opis tej funkcji znajdziesz w następnej sekcji.

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

Ważność powiadomienia

Android używa znaczenia powiadomienia, aby określić, na ile powiadomienie zakłóca użytkownika wizualnie i słuchowo. Im ważniejsze powiadomienie, tym bardziej może zakłócać działanie.

W przypadku Androida 7.1 (poziom interfejsu API 25) lub starszego znaczenie powiadomienia jest określane przezpriority.

W Androidzie 8.0 (poziom interfejsu API 26) lub nowszym znaczenie powiadomienia jest określane przez importance kanału, na którym jest ono publikowane. Użytkownicy mogą zmieniać ważność kanału powiadomień w ustawieniach systemu, jak pokazano na rysunku 12.

Rysunek 12. Użytkownicy mogą zmieniać znaczenie poszczególnych kanałów w Androidzie 8.0 i nowszych.

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

  • Pilne: odtwarza dźwięk i wyświetla powiadomienie.

  • Wysoki: wydaje dźwięk.

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

  • Niski: nie emituje dźwięku i nie pojawia się na pasku stanu.

Wszystkie powiadomienia, niezależnie od ich ważności, wyświetlają się w nieprzerywających elementach interfejsu, takich jak panel powiadomień czy plakietki na ikonie launchera. Możesz jednak zmienić wygląd plakietki powiadomienia.

Więcej informacji znajdziesz w sekcji Ustawianie 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 dla wszystkich powiadomień. Powiadomienia nadal będą się pojawiać w interfejsie systemu zgodnie z ustawieniami użytkownika.

Tryb Nie przeszkadzać ma 3 poziomy:

  • Całkowita cisza: 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 priorytet: użytkownicy mogą skonfigurować, które kategorie systemowe mogą ich przerywać, np. tylko alarmy, przypomnienia, wydarzenia, połączenia lub wiadomości. W przypadku wiadomości i połączeń użytkownicy mogą filtrować je 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 w wersji 8.0 (poziom interfejsu API 26) i wyższych użytkownicy mogą dodatkowo zezwalać na powiadomienia w przypadku kategorii związanych z konkretną aplikacją (zwanych też kanałami) przez zastąpienie trybu Nie przeszkadzać na poziomie poszczególnych kanałów. Aplikacja do płatności może na przykład 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, wpłatach lub na oba rodzaje.

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

Aby skonfigurować powiadomienia dla tych ustawień użytkownika, musisz utworzyć kategorię systemową.

Powiadomienia dotyczące usług działających na pierwszym planie

Powiadomienie jest wymagane, gdy aplikacja uruchamia usługę na pierwszym planie, czyli Service działającą w tle, która jest długotrwała i widoczna dla użytkownika, np. odtwarzacz multimediów. Tego powiadomienia nie można zamknąć tak jak innych powiadomień. Aby usunąć powiadomienie, usługa musi zostać zatrzymana lub usunięta z planu pierwszego planu.

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

Limity dotyczące publikowania treści

Począwszy od Androida 8.1 (poziom interfejsu API 27) aplikacje nie mogą odtwarzać dźwięku powiadomienia częściej niż raz na sekundę. Jeśli aplikacja wysyła kilka powiadomień w ciągu 1 sekundy, wszystkie pojawią się zgodnie z oczekiwaniami, ale tylko pierwsze powiadomienie na sekundę będzie emitować dźwięk.

Android stosuje jednak również limit częstotliwości podczas aktualizowania powiadomienia. Jeśli aktualizacje powiadomienia publikujesz zbyt często, np. kilka w mniej niż jednej sekundzie, system może je pomijać.

Zgodność powiadomień

Interfejs użytkownika systemu powiadomień na Androidzie i powiązane z nim interfejsy API są stale ulepszane. Aby korzystać z najnowszych funkcji interfejsu API powiadomień, jednocześnie obsługując starsze urządzenia, użyj interfejsu API powiadomień w bibliotece wsparcia (NotificationCompat) i jego podklas, a także interfejsu NotificationManagerCompat. Dzięki temu nie musisz pisać kodu warunkowego do sprawdzania poziomów interfejsów API, ponieważ te interfejsy API wykonują to za Ciebie.

NotificationCompat jest aktualizowany wraz z rozwojem platformy, aby uwzględniać najnowsze metody. Dostępność metody w NotificationCompat nie gwarantuje jednak, że odpowiednia funkcja jest dostępna na starszych urządzeniach. W niektórych przypadkach wywołanie nowo wprowadzonego interfejsu API nie powoduje żadnych działań na starszych urządzeniach.

Poniżej znajdziesz podsumowanie najważniejszych zmian w zachowaniu powiadomień na Androidzie w zależności od poziomu interfejsu API.

Android 5.0, poziom interfejsu API 21

  • Wprowadza powiadomienia na ekranie blokady i powiadomienia z poprzednim wyświetleniem.

  • Umożliwia użytkownikowi ustawienie telefonu w trybie Nie przeszkadzać i skonfigurowanie, które powiadomienia mogą przerywać, gdy urządzenie jest w trybie tylko priorytetowe.

  • Dodaje metody ustawiania wyświetlania powiadomień na ekranie blokady (np. setVisibility()) oraz określania „publicznej” wersji tekstu powiadomienia.

  • Dodaje metodę setPriority(), która informuje system, jak bardzo powiadomienie może zakłócić działanie. Na przykład ustawienie priorytetu na wysoki powoduje, że powiadomienie pojawia się jako powiadomienie z ostrzeżeniem.

  • Dodaje obsługę stosów powiadomień na urządzeniach z Androidem Wear (teraz nazywanych Wear OS). Utwórz grupę powiadomień za pomocą setGroup(). Stosy powiadomień, które później nazywano grupami lub pakietami, nie są obsługiwane na tabletach i telefonach z Androidem 7.0 (interfejs API na poziomie 24).

Android 7.0, poziom interfejsu API 24

  • Zmienia wygląd szablonów powiadomień, aby podkreślić obraz bohatera i awatar.

  • Dodaje 3 szablony powiadomień: jeden dla aplikacji do obsługi wiadomości i 2 inne do ozdabiania widoków treści niestandardowych za pomocą rozwijanego elementu interfejsu i innych elementów systemu.

  • Dodaje obsługę grup powiadomień na urządzeniach przenośnych, takich jak telefony i tablety. Używa tego samego interfejsu API co grupy powiadomień Android Wear (obecnie WearOS), wprowadzone w Androidzie 5.0 (poziom interfejsu API 21).

  • Umożliwia użytkownikom odpowiadanie w powiadomieniu za pomocą odpowiedzi w wątku. Użytkownik może wpisać tekst, który zostanie przesłany do aplikacji nadrzędnej powiadomienia.

Android 8.0, poziom 26 interfejsu API

  • Sprawia, że powiadomienia są umieszczane w określonym kanale.

  • Użytkownicy mogą wyłączać powiadomienia z poszczególnych kanałów, a nie wszystkie powiadomienia z aplikacji.

  • Sprawia, że aplikacje z aktywnymi powiadomieniami wyświetlają plakietkę powiadomienia na ikonie aplikacji na ekranie głównym lub w Menu z aplikacjami.

  • Umożliwia użytkownikom odroczenie powiadomienia z poziomu szuflady. Możesz ustawić automatyczne kończenie powiadomienia.

  • Umożliwia ustawienie koloru tła powiadomienia.

  • Przeniesienie niektórych interfejsów API dotyczących zachowania powiadomień z Notification do NotificationChannel. Na przykład na urządzeniach z Androidem 8.0 lub nowszym zamiast NotificationCompat.Builder.setPriority() należy użyć NotificationChannel.setImportance().

Android 13.0, poziom 33 interfejsu API

Android 14.0, poziom 34 interfejsu API

  • Ogranicza powiadomienia intencji pełnoekranowej do aplikacji, które umożliwiają nawiązywanie połączeń i ustawianie alarmów. Aby sprawdzić, czy Twoja aplikacja ma uprawnienia, użyj interfejsu API NotificationManager.canUseFullScreenIntent. Jeśli nie, aplikacja może użyć ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT, aby otworzyć stronę ustawień, na której użytkownicy mogą przyznać uprawnienia.

  • Zmiana sposobu wyświetlania powiadomień, które nie można zamknąć, przez umożliwienie użytkownikom zamykania powiadomień, nawet gdy ustawiony jest flaga Notification.FLAG_ONGOING_EVENT. Nie dotyczy to powiadomień CallStyle, jeśli ustawiony jest parametr Notification.FLAG_ONGOING_EVENT lub kontroler zasad urządzenia (DPC) i pakiety obsługujące dla przedsiębiorstw. Nie dotyczy to też sytuacji, gdy telefon jest zablokowany lub użytkownik kliknie Wyczyść wszystko.