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.
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.
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.
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ń.
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ń.
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ń.
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.
Najczęstsze elementy powiadomienia są oznaczone na rysunku 7 w następujący sposób:
- Mała ikona: wymagana; ustaw za pomocą
setSmallIcon()
. - Nazwa aplikacji: podawana przez system.
- Znak czasu: jest podawany przez system, ale możesz go zastąpić za pomocą
setWhen()
lub ukryć za pomocąsetShowWhen(false)
. - Duża ikona: opcjonalna; zwykle używana tylko w przypadku zdjęć kontaktów.
Nie używaj go jako ikony aplikacji. Ustaw za pomocą
setLargeIcon()
. - Tytuł: opcjonalny; ustaw za pomocą
setContentTitle()
. - 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.
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.
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.
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ł.
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.
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.
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
doNotificationChannel
. Na przykład na urządzeniach z Androidem 8.0 lub nowszym zamiastNotificationCompat.Builder.setPriority()
należy użyćNotificationChannel.setImportance()
.
Android 13.0, poziom 33 interfejsu API
- Dodaje uprawnienia czasu działania. Aby aplikacja mogła wysyłać powiadomienia z wyjątkiem, użytkownik musi przyznać jej to uprawnienie.
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 parametrNotification.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.