Omówienie powiadomień

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

Na tej stronie znajdziesz ogólny opis miejsc, w których pojawiają 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 po projektowaniu powiadomień.

Wygląd na urządzeniu

Powiadomienia automatycznie pojawiają się użytkownikom w różnych lokalizacjach i formatach. Powiadomienie ma postać ikony na pasku stanu, bardziej szczegółowego wpisu w panelu powiadomień i plakietki na ikonie aplikacji. Powiadomienia pojawiają się też na sparowanych urządzeniach do noszenia.

Pasek stanu i panel powiadomień

Powiadomienie pojawia się po raz pierwszy jako ikona na pasku stanu.

Rysunek 1. Z lewej strony paska stanu pojawiają się ikony powiadomień.

Użytkownicy mogą przesunąć palcem w dół na pasku stanu, aby otworzyć panel powiadomień, gdzie będą mogli zobaczyć więcej szczegółów i wykonać działania związane z powiadomieniem.

Rysunek 2. Powiadomienia w panelu powiadomień.

Użytkownicy mogą przeciągnąć powiadomienie w dół, aby wyświetlić rozwinięty widok, w którym widać dodatkowe treści i przyciski polecenia (jeśli są dostępne). Począwszy od Androida 13 ten widok rozwinięty zawiera przycisk umożliwiający użytkownikom zatrzymanie aplikacji, która ma uruchomione usługi na pierwszym planie.

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

Ostrzeżenie

Począwszy od Androida 5.0, powiadomienia mogą pojawiać się przez krótki czas w pływającym oknie nazywanym powiadomieniem z wyprzedzeniem. Zazwyczaj jest to działanie w przypadku ważnych powiadomień, o których użytkownik powinien natychmiast wiedzieć. Pojawia się ono tylko wtedy, gdy urządzenie jest odblokowane.

Rysunek 3. Przed aplikacją na pierwszym planie pojawi się powiadomienie z ostrzeżeniem.

Powiadomienie z ostrzeżeniem wyświetla się, gdy aplikacja wysyła powiadomienie. Po chwili znika, ale pozostaje normalnie w panelu powiadomień.

Oto warunki, które mogą powodować wyświetlanie powiadomień z ostrzeżeniem:

  • Aktywność użytkownika jest w trybie pełnoekranowym, na przykład 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ń jest ważny 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 zaprogramować, czy powiadomienia publikowane przez Twoją aplikację mają być wyświetlane na bezpiecznym ekranie blokady, a jeśli tak, to na jakim poziomie szczegółowości.

W ustawieniach systemu użytkownicy mogą wybrać poziom szczegółowości powiadomień na ekranie blokady lub wyłączyć wszystkie powiadomienia na ekranie blokady. Począwszy od Androida 8.0 użytkownicy mogą wyłączać lub 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 sekcji Ustawianie widoczności ekranu 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 są oznaczone kolorową plakietką znaną jako kropka powiadomienia na odpowiedniej ikonie Menu z aplikacjami.

Użytkownicy mogą kliknąć i przytrzymać ikonę aplikacji, aby zobaczyć powiadomienia z tej aplikacji. W tym menu użytkownicy mogą zamykać powiadomienia i wykonywać dotyczące ich czynności, podobnie jak w szufladzie powiadomień.

Rysunek 5. Plakietki powiadomień oraz menu dotknięcia i przytrzymania.

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 rozwijane szczegóły i przyciski poleceń, pojawiają się automatycznie na tym urządzeniu.

Możesz zwiększyć komfort korzystania z usługi, dostosowując wygląd powiadomień na urządzeniach do noszenia i udostępniając różne działania, w tym sugerowane odpowiedzi i odpowiedzi głosowe. Więcej informacji znajdziesz w artykule o dodawaniu do powiadomienia funkcji przeznaczonych na urządzenia do noszenia.

Rysunek 6. Powiadomienia automatycznie pojawiają się na sparowanym urządzeniu z Wear OS.

Anatomia powiadomień

Projekt powiadomienia jest określany przez szablony systemowe, a aplikacja określa 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 zostały wskazane na rys. 7 w ten sposób:

  1. Mała ikona: wymagana; ustawiona za pomocą właściwości setSmallIcon().
  2. Nazwa aplikacji: podana przez system.
  3. Sygnatura czasowa: podana przez system, ale możesz ją zastąpić poleceniem setWhen() lub ją ukryć, używając setShowWhen(false).
  4. Duża ikona: opcjonalna, zwykle używana tylko do zdjęć kontaktów. Nie używaj go jako ikony aplikacji. Ustaw za pomocą właściwości setLargeIcon().
  5. Tytuł: opcjonalny; ustawiany za pomocą właściwości setContentTitle().
  6. Tekst: opcjonalny; ustawiany za pomocą właściwości setContentText().

Zdecydowanie zalecamy korzystanie z szablonów systemowych, aby projekt był zgodny z zasadami na wszystkich urządzeniach. Jeśli to konieczne, możesz utworzyć niestandardowy układ powiadomień.

Więcej informacji na temat tworzenia powiadomień za pomocą tych i innych funkcji znajdziesz w artykule Tworzenie powiadomienia.

Działania powiadomień

Chociaż nie jest to wymagane, dobrze jest, aby każde kliknięcie otwierało odpowiednią aktywność w aplikacji. Oprócz tego domyślnego działania możesz dodać przyciski poleceń, które wykonują z powiadomienia czynność związaną z aplikacją – często bez otwierania żadnej aktywności – jak pokazano na ilustracji 8.

Rysunek 8. Powiadomienie z przyciskami poleceń.

Od Androida 7.0 (poziom interfejsu API 24) bezpośrednio z poziomu powiadomienia możesz dodawać działanie, aby odpowiadać na wiadomości lub wpisywać inny tekst.

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 poleceń jest szczegółowo wyjaśnione w sekcji Tworzenie powiadomienia.

Wymaganie odblokowanego urządzenia

Użytkownicy mogą zobaczyć działania związane z powiadomieniami na ekranie blokady urządzenia. Jeśli działanie związane z powiadomieniem powoduje uruchomienie przez aplikację działania lub wysłanie bezpośredniej odpowiedzi, użytkownicy muszą odblokować urządzenie, aby aplikacja mogła wywołać to działanie.

W Androidzie 12 (poziom interfejsu API 31) i nowszych możesz skonfigurować powiadomienie, tak aby aplikacja mogła wywołać takie działanie, niezależnie od przepływu pracy. Ta opcja dodaje kolejną warstwę zabezpieczeń do powiadomień na zablokowanych urządzeniach.

Aby wymagać odblokowania urządzenia przed wywołaniem danego powiadomienia przez aplikację, podczas tworzenia działania związanego z powiadomieniem przekaż true do 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();

Rozwijane powiadomienie

Domyślnie tekst powiadomienia jest przycinany tak, aby mieścił się w jednym wierszu. Jeśli chcesz, aby powiadomienie było dłuższe, możesz wykorzystać dodatkowy szablon, jak pokazano na ilustracji 9. Aby zwiększyć obszar tekstowy, który można rozwinąć.

Rysunek 9. Rozwijane powiadomienie o dużym tekście.

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 rozwijanych powiadomień.

Aktualizacje powiadomień i grupy

Aby nie zasypywać użytkowników wieloma lub nadmiarowymi powiadomieniami o aktualizacjach, zaktualizuj istniejące powiadomienie, zamiast wysyłać nowe. Możesz też skorzystać z powiadomienia w stylu skrzynki odbiorczej, aby pokazać aktualizacje rozmowy.

Jeśli jednak chcesz dostarczać wiele powiadomień, rozważ pogrupowanie ich w grupę. Funkcja jest dostępna na Androidzie 7.0 i nowszych.

Grupa powiadomień umożliwia zwijanie wielu powiadomień w jednym poście w panelu powiadomień z podsumowaniem. Użytkownik może stopniowo rozwijać grupę powiadomień i każde zawarte w niej powiadomienia, aby uzyskać więcej szczegółów, jak pokazano na ilustracji 10.

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

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

Kanały powiadomień

Od Androida 8.0 (poziom interfejsu API 26) wszystkie powiadomienia muszą być przypisane do kanału. W przeciwnym razie się nie wyświetlą. Umożliwi to użytkownikom wyłączenie określonych kanałów powiadomień aplikacji zamiast wyłączania wszystkich powiadomień. Użytkownicy mogą zmieniać opcje wizualne i dźwiękowe każdego kanału z poziomu ustawień systemu Android, jak pokazano na ilustracji 11. Użytkownicy mogą też nacisnąć i przytrzymać powiadomienie, aby zmienić działanie powiązanego kanału.

Na urządzeniach z Androidem 7.1 (poziom interfejsu API 25) lub starszym użytkownicy mogą zarządzać powiadomieniami tylko dla poszczególnych aplikacji. Każda aplikacja ma tylko jeden kanał na Androida 7.1 lub starszego.

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

Aplikacja może mieć oddzielny kanał dla każdego typu powiadomień, których dotyczy problem. Aplikacja może również 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 w Androidzie 8.0 i nowszych powiadomieniach określa się poziom ważności. Dzięki temu wszystkie powiadomienia publikowane na tym samym kanale powiadomień działają tak samo. Zostało to opisane w następnej sekcji.

Więcej informacji znajdziesz w artykule o tworzeniu kanałów powiadomień i zarządzaniu nimi.

Znaczenie powiadomień

Android na podstawie ważności powiadomienia określa, w jakim stopniu powiadomienie zakłóca wizualne i dźwiękowe działanie użytkownika. Im większe znaczenie ma powiadomienie, tym bardziej rozpraszające.

W Androidzie 7.1 (poziom interfejsu API 25) i starszych znaczenie powiadomienia jest określane przez jego priority.

W Androidzie 8.0 (poziom interfejsu API 26) i nowszych o wadze powiadomienia decyduje o tym importance kanału, na którym zostało ono opublikowane. Użytkownicy mogą zmienić znaczenie kanału powiadomień w ustawieniach systemu, jak pokazano na ilustracji 12.

Rysunek 12. Na Androidzie 8.0 i nowszych użytkownicy mogą zmienić znaczenie każdego kanału.

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

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

  • Wysoki: wydaje dźwięk.

  • Średni: brak dźwięku.

  • Niska: nie wydaje dźwięku i wyświetla się na pasku stanu.

Wszystkie powiadomienia, niezależnie od ich ważności, pojawiają się w miejscach w interfejsie systemu, które nie zakłócają działania systemu, np. w panelu powiadomień lub w postaci plakietki na ikonie programu uruchamiającego. Możesz jednak zmienić wygląd plakietki powiadomienia.

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

Tryb Nie przeszkadzać

Począwszy od Androida 5.0 (poziom interfejsu API 21), użytkownicy mogą włączać tryb Nie przeszkadzać, który wycisza dźwięki i wibracje we wszystkich powiadomieniach. Powiadomienia będą się wyświetlać w interfejsie systemu w zwykły sposób, chyba że użytkownik określi inaczej.

W trybie Nie przeszkadzać dostępne są 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 priorytetowe: użytkownicy mogą określać, które kategorie systemowe mogą im przeszkadzać, np. alarmy, przypomnienia, wydarzenia, połączenia lub wiadomości. W przypadku wiadomości i połączeń użytkownicy mogą filtrować wiadomości według nadawcy lub rozmówcy, jak pokazano na ilustracji 13.

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

Na Androidzie 8.0 (poziom interfejsu API 26) i nowszych użytkownicy mogą dodatkowo zezwolić na wyświetlanie powiadomień z kategorii aplikacji (nazywanych też kanałami). W tym celu dla każdego kanału zastąpią tryb Nie przeszkadzać. Na przykład aplikacja płatnicza może mieć kanały powiadomień dotyczących wypłat i wpłat. W trybie priorytetowym użytkownik może zezwolić na powiadomienia o odstąpieniu od umowy lub wpłatach lub oba te powiadomienia.

Na urządzeniach z Androidem 7.1 (poziom interfejsu API 25) lub starszym użytkownicy mogą zezwalać na powiadomienia indywidualnie dla każdej aplikacji, a nie tylko dla każdego kanału.

Aby skonfigurować powiadomienia dla tych ustawień użytkownika, musisz ustawić kategorię obejmującą cały system.

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

Powiadomienie jest wymagane, gdy aplikacja działa usługą na pierwszym planie, czyli działającym w tle działającym od dawna i widocznym dla użytkownika systemem Service (takim jak odtwarzacz multimediów). Tego powiadomienia nie można odrzucić tak jak innych powiadomień. Aby usunąć powiadomienie, należy zatrzymać usługę lub usunąć ją ze stanu na pierwszym planie.

Więcej informacji znajdziesz w artykule na temat usług działających na pierwszym planie. Jeśli tworzysz odtwarzacz multimedialny, przeczytaj też artykuł Odtwarzanie multimediów w tle.

Limity postów

Od Androida 8.1 (poziom interfejsu API 27) aplikacje nie mogą powiadamiać dźwięku powiadomienia częściej niż raz na sekundę. Jeśli aplikacja publikuje wiele powiadomień w ciągu jednej sekundy, wszystkie wyświetlają się zgodnie z oczekiwaniami, ale tylko pierwsze powiadomienie na sekundę jest sygnalizowane dźwiękiem.

Android stosuje też jednak ograniczenie liczby żądań podczas aktualizowania powiadomienia. Jeśli zbyt często publikujesz aktualizacje w jednym powiadomieniu, na przykład w czasie krótszym niż jedna sekunda, system może je odrzucać.

Zgodność powiadomień

Interfejs systemu powiadomień Androida i związane z nimi interfejsy API stale ewoluują. Aby korzystać z najnowszych funkcji interfejsu Notification API, gdy jednocześnie obsługują one starsze urządzenia, użyj interfejsu Support Library Notification API NotificationCompat i jego podklas, a także NotificationManagerCompat. Pozwala to uniknąć pisania kodu warunkowego służącego do sprawdzania poziomów interfejsów API, ponieważ obsługują go te interfejsy API.

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

Poniżej znajdziesz podsumowanie najważniejszych zmian w działaniu powiadomień na Androida według poziomu interfejsu API.

Android 5.0, poziom API 21

  • Włącza ekran blokady i powiadomienia HUD.

  • Pozwala użytkownikowi przełączyć telefon w tryb Nie przeszkadzać i określić, które powiadomienia mogą mu przeszkadzać, gdy urządzenie jest w trybie tylko priorytetowym.

  • Dodaje metody określające, czy powiadomienie ma być wyświetlane na ekranie blokady, np. setVisibility(), oraz ustalanie „publicznej” wersji tekstu powiadomienia.

  • Dodaje metodę setPriority(), która informuje system, jak przeszkadzające jest powiadomienie. Na przykład ustawienie wysokiego priorytetu sprawia, że powiadomienie wyświetla się jako powiadomienie z ostrzeżeniem.

  • Dodaje obsługę stosów powiadomień na urządzeniach z Androidem Wear (obecnie Wear OS). Umieść powiadomienia w stosie za pomocą setGroup(). Stosy powiadomień, nazywane później grupami lub pakietami, nie są obsługiwane na tabletach ani telefonach do wersji Androida 7.0 (poziom interfejsu API 24).

Android 7.0, poziom API 24

  • Zmienia styl szablonów powiadomień, by uwypuklić baner powitalny i awatara.

  • Dodaje 3 szablony powiadomień: jeden dla aplikacji do obsługi wiadomości, a dwa pozostałe do dekoracji niestandardowych widoków treści za pomocą rozwijanych zasobów reklamowych i innych elementów dekoracyjnych.

  • Dodaje obsługę grup powiadomień na urządzeniach mobilnych, takich jak telefony i tablety. Interfejs API używa tego samego interfejsu API co stosy powiadomień Androida Wear (nazywane teraz Wear OS) wprowadzone w Androidzie 5.0 (poziom API 21).

  • Umożliwia użytkownikom odpowiadanie w powiadomieniu przy użyciu odpowiedzi w tekście. Mogą wpisywać tekst, który jest następnie przekazywany do aplikacji nadrzędnej.

Android 8.0, poziom API 26

  • Powoduje, że poszczególne powiadomienia będą umieszczane na określonym kanale.

  • Pozwala użytkownikom wyłączać powiadomienia z konkretnego kanału, zamiast wyłączać wszystkie powiadomienia z danej aplikacji.

  • Sprawia, że aplikacje z aktywnymi powiadomieniami wyświetlają plakietkę powiadomień u góry ikony aplikacji na ekranie głównym lub ekranie programu uruchamiającego.

  • Pozwala użytkownikom odłożyć powiadomienie z panelu. Możesz ustawić automatyczne czas oczekiwania na powiadomienie.

  • Pozwala ustawić kolor tła powiadomienia.

  • Przenosi niektóre interfejsy API dotyczące zachowania powiadomień z Notification do NotificationChannel. Na przykład użyj NotificationChannel.setImportance() zamiast NotificationCompat.Builder.setPriority() na Androidzie 8.0 i nowszych.

Android 13.0, poziom API 33

Android 14.0, poziom API 34

  • Ogranicza powiadomienia intencji pełnoekranowej do aplikacji, które wykonują połączenia i alarmy. Użyj interfejsu API NotificationManager.canUseFullScreenIntent, aby sprawdzić, czy aplikacja ma odpowiednie uprawnienia. 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ą przyznawać te uprawnienia.

  • Zmienia sposób, w jaki użytkownicy widzą powiadomienia, których nie można zamknąć, umożliwiając im odrzucanie działań związanych z powiadomieniami nawet wtedy, gdy jest ustawiona flaga Notification.FLAG_ONGOING_EVENT. Nie dotyczy to powiadomień CallStyle, jeśli ustawiona jest flaga Notification.FLAG_ONGOING_EVENT lub kontroler zasad dotyczących urządzeń (DPC) oraz pakiety pomocnicze dla firm. Nie dotyczy to też sytuacji, gdy telefon jest zablokowany ani gdy użytkownik wybierze Wyczyść wszystko.