Omówienie powiadomień

Powiadomienie to wiadomość, która wyświetla się poza interfejsem aplikacji. Zawiera ona przypomnienia, informacje od innych osób lub inne aktualne informacje z aplikacji. Użytkownik może kliknąć powiadomienie, aby otworzyć aplikację lub wykonać działanie bezpośrednio z poziomu powiadomienia.

Na tej stronie znajdziesz przegląd miejsc, w których pojawiają się powiadomienia, i dostępne funkcje. Aby zacząć tworzyć powiadomienia, przeczytaj artykuł Tworzenie powiadomienia.

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

Wyświetlane na urządzeniu

Powiadomienia automatycznie wyświetlają się użytkownikom w różnych lokalizacjach i formatach. Powiadomienia mają postać ikony na pasku stanu, bardziej szczegółowy wpis w panelu powiadomień oraz plakietka na ikonie aplikacji. Powiadomienia pojawiają się też na sparowanych urządzeniach do noszenia.

Pasek stanu i panel powiadomień

Wysyłane powiadomienie najpierw wyświetla się jako ikona na pasku stanu.

Rysunek 1. Ikony powiadomień są wyświetlane po lewej stronie paska stanu.

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

Rysunek 2. Powiadomienia w panelu powiadomień.

Użytkownicy mogą przeciągnąć powiadomienie w dół po panelu, aby wyświetlić widok rozwinięty, w którym widać dodatkową treść i przyciski polecenia (jeśli są dostępne). Począwszy od Androida 13 ten widok rozwinięty zawiera przycisk, który umożliwia użytkownikom zatrzymanie aplikacji z aktywnymi usługami na pierwszym planie.

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

Powiadomienie

Począwszy od Androida 5.0 powiadomienia mogą przez chwilę wyświetlać się w pływającym oknie nazywanym powiadomieniem z ostrzeżeniem. Zazwyczaj dzieje się tak w przypadku ważnych powiadomień, o których użytkownik musi natychmiast się dowiedzieć. Pojawia się tylko wtedy, gdy urządzenie jest odblokowane.

Rysunek 3. Przed aplikacją na pierwszym planie wyświetla się powiadomienie HUD.

Powiadomienie wyświetli się, gdy aplikacja wyśle powiadomienie. Po chwili znika, ale pozostaje widoczny w panelu powiadomień.

Warunki, które mogą powodować wyświetlanie powiadomień z ostrzeżeniem, są następujące:

  • aktywność użytkownika jest wyświetlana w trybie pełnoekranowym, na przykład wtedy, 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 szczególnie ważny na urządzeniach z Androidem 8.0 (poziom interfejsu API 26) i nowszym.

Ekran blokady

Począwszy od Androida 5.0 powiadomienia mogą wyświetlać się na ekranie blokady.

Możesz automatycznie określić, czy powiadomienia publikowane przez Twoją aplikację mają być wyświetlane na bezpiecznym ekranie blokady, a jeśli tak, to jaki będzie poziom ich widoczności.

W ustawieniach systemowych użytkownicy mogą wybrać poziom szczegółowości powiadomień wyświetlanych na ekranie blokady lub wyłączyć wszystkie powiadomienia na ekranie blokady. Począwszy od Androida 8.0 użytkownicy mogą włączać i wyłączać powiadomienia na ekranie blokady w przypadku 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

W obsługiwanych programach uruchamiających na urządzeniach z Androidem 8.0 (poziom interfejsu API 26) lub nowszym ikony aplikacji oznaczają nowe powiadomienia kolorową plakietką nazywaną kropkami powiadomienia na odpowiedniej ikonie programu uruchamiającego aplikacje.

Użytkownicy mogą nacisnąć i przytrzymać ikonę aplikacji, aby zobaczyć powiadomienia z tej aplikacji. W tym menu można zamykać powiadomienia i wykonywać na nich 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.

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 polecenia, pojawiają się na nim automatycznie.

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

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

Anatomia powiadomień

Projekt powiadomienia jest określany na podstawie szablonów systemowych, a aplikacja definiuje treść każdej części szablonu. Niektóre szczegóły powiadomienia pojawiają się tylko w widoku rozwiniętym.

Rysunek 7. Powiadomienie z podstawowymi informacjami.

Najczęstsze części powiadomień są pokazane na rys. 7 w następujący sposób:

  1. Mała ikona: wymagana; ustawiona przy użyciu setSmallIcon().
  2. Nazwa aplikacji: podana przez system.
  3. Sygnatura czasowa: podana przez system, ale możesz ją zastąpić za pomocą polecenia setWhen() lub ukryć za pomocą parametru 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ą parametru setLargeIcon().
  5. Tytuł jest opcjonalny. Ustaw go za pomocą atrybutu setContentTitle().
  6. Tekst: opcjonalny. Ustaw za pomocą setContentText().

Zdecydowanie zalecamy korzystanie z szablonów systemowych, by zapewnić zgodność projektu na wszystkich urządzeniach. W razie potrzeby możesz utworzyć niestandardowy układ powiadomień.

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

Działania powiadomień

Chociaż nie jest to wymagane, dobrze jest, gdy kliknięcie powoduje otwarcie odpowiedniej aktywności w aplikacji, przy każdym powiadomieniu. Oprócz tego domyślnego działania związanego z powiadomieniami możesz dodać przyciski poleceń, które wykonują działanie związane z aplikacją z poziomu powiadomienia – często bez otwierania aktywności – jak pokazano na rys. 8.

Rysunek 8. Powiadomienie z przyciskami polecenia.

Począwszy od Androida w wersji 7.0 (poziom interfejsu API 24) możesz dodawać działania, które pozwalają odpowiadać na wiadomości lub wpisywać inny tekst bezpośrednio z powiadomienia.

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

Dodawanie przycisków poleceń szczegółowo opisujemy w sekcji Tworzenie powiadomienia.

Wymagaj odblokowania urządzenia

Użytkownicy mogą zobaczyć działania związane z powiadomieniami na ekranie blokady urządzenia. Jeśli działanie powiadomienia spowoduje, że aplikacja uruchomi aktywność lub wyśle bezpośrednią odpowiedź, użytkownik będzie musiał odblokować urządzenie, zanim aplikacja będzie mogła wywołać to działanie.

W Androidzie 12 (poziom interfejsu API 31) i nowszych możesz skonfigurować działanie powiadomienia, tak aby aplikacja musiała odblokować urządzenie, bez względu na przepływ pracy, który to działanie wykonuje. Ta opcja stanowi dodatkową warstwę zabezpieczeń w przypadku powiadomień na zablokowanych urządzeniach.

Aby wymagać odblokowania urządzenia przed wywołaniem danego działania powiadomienia przez aplikację, podczas tworzenia działania powiadomienia przekaż true do setAuthenticationRequired(), tak jak 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 tekst powiadomienia jest skracany do jednego wiersza. Jeśli chcesz wydłużyć powiadomienie, możesz włączyć większy obszar tekstowy, który można rozwinąć, stosując dodatkowy szablon, jak widać na rysunku 9.

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 powiadomienia rozwijanego.

Aktualizacje i grupy powiadomień

Aby nie zasypywać użytkowników wieloma lub zbędnymi powiadomieniami o nowych aktualizacjach, zaktualizuj istniejące powiadomienie, zamiast wysyłać nowe. Możesz też użyć powiadomienia w stylu skrzynki odbiorczej, aby wyświetlić aktualizacje dotyczące rozmowy.

Jeśli jednak konieczne jest dostarczanie wielu powiadomień, rozważ pogrupowanie ich w jedną grupę. Funkcja ta jest dostępna w Androidzie 7.0 i nowszych.

Grupa powiadomień umożliwia zwijanie wielu powiadomień do jednego posta w panelu powiadomień wraz z podsumowaniem. Użytkownik może stopniowo rozwijać grupę powiadomień i zawarte w niej powiadomienia, aby uzyskać więcej informacji, jak pokazano na rysunku 10.

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

Aby dowiedzieć się, jak dodać powiadomienia do grupy, zobacz 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 nie będą się pojawiać. Dzięki temu użytkownicy mogą wyłączyć określone kanały powiadomień z aplikacji, zamiast wyłączać wszystkie powiadomienia. Użytkownicy mogą kontrolować opcje wizualne i dźwiękowe w każdym kanale w ustawieniach 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 w odniesieniu do poszczególnych aplikacji. Każda aplikacja ma tylko 1 kanał na Androidzie 7.1 i starszych.

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

Aplikacja może mieć oddzielne kanały dla każdego typu powiadomień, które powodują jej problemy. 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.

Kanał pozwala też określić poziom ważności powiadomień na Androidzie 8.0 i nowszych, więc wszystkie powiadomienia opublikowane w tym samym kanale powiadomień działają tak samo. Zostało to opisane w następnej sekcji.

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

Znaczenie powiadomień

Android określa ważność powiadomienia, aby określić, w jakim stopniu jest ono widoczne w sposób wizualny i dźwiękowy dla użytkownika. Im większe znaczenie powiadomienia, tym bardziej jest ono rozpraszające.

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

W Androidzie w wersji 8.0 (poziom interfejsu API 26) i nowszych o znaczeniu powiadomienia określa właściwość importance kanału, na którym zostało ono opublikowane. Użytkownicy mogą zmienić znaczenie kanału powiadomień w ustawieniach systemu, jak pokazano na rys. 12.

Rysunek 12. Użytkownicy mogą zmienić znaczenie każdego kanału na Androidzie 8.0 lub nowszym.

Możliwe poziomy ważności i powiązane z nimi zachowania powiadomień są następujące:

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

  • Wysoka: odtwarza dźwięk.

  • Średni poziom: nie słychać dźwięku.

  • Niska: nie generuje dźwięku i nie jest wyświetlana na pasku stanu.

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

Aby dowiedzieć się więcej, przeczytaj o tym, jak określać ważność.

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 we wszystkich powiadomieniach. Powiadomienia są wyświetlane w interfejsie systemu w zwykły sposób, chyba że użytkownik zdecyduje 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ślić, które kategorie systemowe mogą zakłócać ich działanie, na przykład tylko alarmy, przypomnienia, wydarzenia, połączenia czy wiadomości. W przypadku wiadomości i połączeń użytkownicy mogą filtrować wiadomości według nadawcy lub rozmówcy, co pokazano na rys. 13.

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

W Androidzie 8.0 (poziom interfejsu API 26) i nowszych użytkownicy mogą dodatkowo zezwolić na powiadomienia dotyczące kategorii aplikacji – nazywanych też kanałami – zastępując tryb Nie przeszkadzać dla poszczególnych kanałów. Na przykład aplikacja płatnicza może mieć kanały powiadomień o wypłatach i wpłatach. Użytkownik może zezwolić na powiadomienia o odstąpieniu od umowy, powiadomienia o wpłacie lub na oba te sposoby w trybie priorytetu.

Na urządzeniach z Androidem 7.1 (poziom interfejsu API 25) lub starszym użytkownicy mogą zezwalać na wysyłanie powiadomień osobno dla każdej aplikacji, a nie dla poszczególnych kanałów.

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

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

Powiadomienie jest wymagane, gdy aplikacja uruchamia usługę na pierwszym planieService działającą w tle, która jest długotrwała i zauważalna dla użytkownika (np. odtwarzacz multimediów). Tego powiadomienia nie można zamknąć, tak jak innych powiadomień. Aby usunąć powiadomienie, musisz 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 multimediów, przeczytaj też artykuł Odtwarzanie multimediów w tle.

Limity postów

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 publikuje wiele powiadomień w ciągu jednej sekundy, wszystkie pojawiają się zgodnie z oczekiwaniami, ale tylko pierwsze powiadomienie na sekundę jest odtwarzane.

Jednak Android stosuje też limit żądań podczas aktualizowania powiadomień. Jeśli zbyt często będziesz publikować aktualizacje pojedynczego powiadomienia (np. w czasie krótszym niż jedna sekunda), system może zrezygnować z aktualizacji.

Zgodność powiadomień

Interfejs systemu powiadomień Androida i interfejsy API związane z powiadomieniami stale się rozwijają. Aby korzystać z najnowszych funkcji interfejsu API powiadomień, a jednocześnie obsługiwać starsze urządzenia, użyj interfejsu Support Library Notification API NotificationCompat, jego podklas oraz NotificationManagerCompat. Dzięki temu unikniesz pisania kodu warunkowego w celu sprawdzania poziomów interfejsu API, ponieważ te interfejsy API obsługują ten proces.

NotificationCompat jest aktualizowany w miarę rozwoju platformy, aby uwzględniał najnowsze metody. Dostępność metody w NotificationCompat nie gwarantuje jednak, że dana funkcja będzie dostępna na starszych urządzeniach. W niektórych przypadkach wywołanie nowo wprowadzonego interfejsu API na starszych urządzeniach powoduje brak działania.

Poniżej znajdziesz podsumowanie najważniejszych zmian w działaniu powiadomień na Androidzie w poszczególnych poziomach interfejsu API.

Android 5.0, poziom API 21

  • Wprowadza ekran blokady i powiadomienia z ostrzeżeniem.

  • Pozwala użytkownikowi ustawić telefon w trybie Nie przeszkadzać i określić, które powiadomienia mogą mu przeszkadzać, gdy urządzenie jest w trybie „Tylko priorytetowy”.

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

  • Dodaje metodę setPriority(), która informuje system, jak uciążliwe jest powiadomienie. Jeśli na przykład ustawisz wysoki priorytet, powiadomienie będzie się wyświetlać jako powiadomienie.

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

Android 7.0, poziom API 24

  • Zmienia styl szablonów powiadomień, kładąc nacisk na baner powitalny i awatara.

  • Dodaje 3 szablony powiadomień: jeden dla aplikacji do obsługi wiadomości, drugi do dekorowania niestandardowych widoków treści za pomocą funkcji rozwijania i innych dekoracji systemowych.

  • Dodaje obsługę grup powiadomień na urządzeniach przenośnych, takich jak telefony i tablety. Korzysta z tego samego interfejsu API co Android Wear (obecnie nazywane stosami powiadomień Wear OS) wprowadzone w Androidzie 5.0 (poziom API 21).

  • Umożliwia użytkownikom odpowiadanie w treści powiadomienia przy użyciu odpowiedzi w tekście. Mogą wpisać tekst, który jest następnie przekierowywany do aplikacji nadrzędnej powiadomienia.

Android 8.0, poziom API 26

  • Powoduje umieszczenie poszczególnych powiadomień na konkretnym kanale.

  • Umożliwia użytkownikom wyłączenie powiadomień z danego kanału zamiast wyłączania wszystkich powiadomień z aplikacji.

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

  • Umożliwia użytkownikom odłożenie powiadomienia z panelu. Możesz ustawić automatyczne czas oczekiwania na powiadomienie.

  • Pozwala ustawić kolor tła powiadomienia.

  • Przenieś niektóre interfejsy API dotyczące sposobu działania powiadomień z Notification do NotificationChannel. Na przykład w Androidzie 8.0 lub nowszym używaj NotificationChannel.setImportance() zamiast NotificationCompat.Builder.setPriority().

Android 13.0, poziom API 33

Android 14.0, poziom API 34

  • Ogranicza powiadomienia intencji pełnoekranowej do aplikacji, które służą do wykonywania połączeń i budowania alarmów. Użyj interfejsu API NotificationManager.canUseFullScreenIntent, aby sprawdzić, czy aplikacja ma uprawnienia. W przeciwnym razie aplikacja może używać uprawnienia ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT do uruchamiania strony ustawień, na której użytkownicy mogą przyznać te uprawnienia.

  • Zmienia sposób wyświetlania użytkownikom powiadomień, których nie można zamknąć, umożliwiając im odrzucanie działań związanych z powiadomieniami, nawet jeśli ustawiona jest flaga Notification.FLAG_ONGOING_EVENT. Nie dotyczy to powiadomień CallStyle z ustawionym flagą Notification.FLAG_ONGOING_EVENT lub kontrolerem zasad dotyczących urządzeń (DPC) i obsługiwanymi pakietami dla firm. Nie dotyczy to też sytuacji, gdy telefon jest zablokowany lub gdy użytkownik wybierze Wyczyść wszystko.