Począwszy od Androida 8.0 (interfejs API na poziomie 26), wszystkie powiadomienia muszą być przypisane do kanału. W przypadku każdego kanału możesz ustawić zachowanie wizualne i dźwiękowe, które będzie stosowane do wszystkich powiadomień na tym kanale. Użytkownicy mogą zmieniać te ustawienia i decydować, które kanały powiadomień z Twojej aplikacji mogą być natrętne lub widoczne.
Obejrzyj ten film, aby dowiedzieć się więcej o kanałach i innych funkcjach powiadomień w Androidzie 8.0.
Ustawienia użytkownika dotyczące kanałów powiadomień są dostępne dla każdej aplikacji w ustawieniach systemu, jak pokazano na ilustracji 1.
Rysunek 1. Ustawienia powiadomień aplikacji Zegar i jednego z jej kanałów.
Po utworzeniu kanału powiadomień nie możesz zmienić sposobu działania powiadomień. W tym momencie użytkownik ma pełną kontrolę. Możesz jednak zmienić nazwę i opis kanału.
Utwórz kanał dla każdego rodzaju powiadomień, które chcesz wysyłać. Możesz też tworzyć kanały powiadomień, które odzwierciedlają 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.
Jeśli kierujesz aplikację na Androida 8.0 (API na poziomie 26) lub nowszego, musisz zaimplementować co najmniej 1 kanał powiadomień. Jeśli wartość targetSdkVersion jest ustawiona na 25 lub niższą, aplikacja działająca na Androidzie 8.0 (interfejs API na poziomie 26) lub nowszym zachowuje się tak samo jak na urządzeniach z Androidem 7.1 (interfejs API na poziomie 25) lub starszym.
Tworzenie kanału powiadomień
Aby utworzyć kanał powiadomień, wykonaj te czynności:
Utwórz obiekt
NotificationChannelz unikalnym identyfikatorem kanału, nazwą widoczną dla użytkownika i poziomem ważności.Opcjonalnie możesz określić opis, który użytkownik widzi w ustawieniach systemu, za pomocą parametru
setDescription().Zarejestruj kanał powiadomień, przekazując go do funkcji
createNotificationChannel().
Poniższy przykład pokazuje, jak utworzyć i zarejestrować kanał powiadomień:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Create the NotificationChannel.
val name = getString(R.string.channel_name)
val descriptionText = getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_DEFAULT
val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
mChannel.description = descriptionText
// Register the channel with the system. You can't change the importance
// or other notification behaviors after this.
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)
}
Ponowne utworzenie istniejącego kanału powiadomień z jego pierwotnymi wartościami nie powoduje żadnej operacji, więc możesz wywoływać ten kod podczas uruchamiania aplikacji.
Domyślnie wszystkie powiadomienia publikowane na danym kanale korzystają z zachowań wizualnych i słuchowych zdefiniowanych przez poziom ważności z klasy NotificationManagerCompat, takich jak IMPORTANCE_DEFAULT lub IMPORTANCE_HIGH. Więcej informacji o poziomach ważności znajdziesz w następnej sekcji.
Jeśli chcesz jeszcze bardziej dostosować domyślne zachowania powiadomień na kanale, możesz wywołać metody takie jak enableLights(), setLightColor() i setVibrationPattern() w NotificationChannel. Pamiętaj, że po utworzeniu kanału nie możesz zmienić tych ustawień, a użytkownik ma ostateczną kontrolę nad tym, czy te zachowania są aktywne.
Możesz też utworzyć wiele kanałów powiadomień w ramach jednej operacji, wywołując createNotificationChannels().
Ustawianie poziomu ważności
Ważność kanału wpływa na poziom przerywania wszystkich powiadomień publikowanych na tym kanale. Określ go w konstruktorze NotificationChannel, używając jednego z 5 poziomów ważności w zakresie od IMPORTANCE_NONE(0) do IMPORTANCE_HIGH(4).
Aby obsługiwać urządzenia z Androidem 7.1 (poziom interfejsu API 25) lub starszym, musisz też wywołać metodę setPriority() dla każdego powiadomienia, używając stałej priorytetu z klasy NotificationCompat.
Stałe ważności (NotificationManager.IMPORTANCE_*) i priorytetu (NotificationCompat.PRIORITY_*) odpowiadają widocznym dla użytkownika opcjom ważności, jak pokazano w tej tabeli.
| Poziom ważności widoczny dla użytkownika | Ważność (Android 8.0 lub nowszy) | Priorytet (Android 7.1 i starsze) |
|---|---|---|
| Pilne – odtwarza dźwięk i wyświetla się jako powiadomienie z ostrzeżeniem. |
IMPORTANCE_HIGH |
PRIORITY_HIGH lub PRIORITY_MAX |
| Wysoki Wydaje dźwięk. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
| Średnie Nie wydaje dźwięku. |
IMPORTANCE_LOW |
PRIORITY_LOW |
| Niskie – nie wydaje dźwięku i nie pojawia się na pasku stanu. |
IMPORTANCE_MIN |
PRIORITY_MIN |
| Brak Nie jest sygnalizowane dźwiękiem i nie pojawia się na pasku stanu ani w obszarze powiadomień. |
IMPORTANCE_NONE |
N/A |
Wszystkie powiadomienia, niezależnie od ich ważności, pojawiają się w nieprzeszkadzających miejscach interfejsu systemu, np. w panelu powiadomień i jako plakietka na ikonie programu uruchamiającego. Możesz jednak zmienić wygląd plakietki powiadomienia.
Po przesłaniu kanału do NotificationManager nie można zmienić poziomu ważności. Użytkownik może jednak w każdej chwili zmienić ustawienia dotyczące kanałów Twojej aplikacji.
Więcej informacji o wybieraniu odpowiedniego poziomu priorytetu znajdziesz w sekcji „Poziomy priorytetu” w przewodniku po projektowaniu powiadomień.
Odczytywanie ustawień kanału powiadomień
Użytkownicy mogą modyfikować ustawienia kanałów powiadomień, w tym zachowania, takie jak wibracje i dźwięk alertu. Jeśli chcesz poznać ustawienia, które użytkownik stosuje do Twoich kanałów powiadomień, wykonaj te czynności:
Pobierz obiekt
NotificationChannel, wywołując funkcjęgetNotificationChannel()lubgetNotificationChannels().Wysyłaj zapytania o ustawienia konkretnych kanałów, takie jak
getVibrationPattern(),getSound()igetImportance().
Jeśli wykryjesz ustawienie kanału, które Twoim zdaniem utrudnia prawidłowe działanie aplikacji, możesz zaproponować użytkownikowi zmianę tego ustawienia i udostępnić działanie umożliwiające otwarcie ustawień kanału, jak pokazano w następnej sekcji.
Otwórz ustawienia kanału powiadomień.
Po utworzeniu kanału powiadomień nie możesz programowo zmieniać jego zachowań wizualnych i dźwiękowych. Tylko użytkownik może zmieniać zachowania kanałów w ustawieniach systemu. Aby zapewnić użytkownikom szybki dostęp do tych ustawień powiadomień, dodaj w interfejsie ustawień aplikacji element, który otwiera te ustawienia systemowe.
Ustawienia systemowe kanałów powiadomień możesz otworzyć za pomocą Intent, które korzysta z działania ACTION_CHANNEL_NOTIFICATION_SETTINGS.
Na przykład poniższy przykładowy kod pokazuje, jak przekierować użytkownika do ustawień kanału powiadomień:
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
}
startActivity(intent)
Zwróć uwagę, że intencja wymaga 2 dodatkowych informacji, które określają nazwę pakietu aplikacji (znaną też jako identyfikator aplikacji) i kanał do edycji.
Usuwanie kanału powiadomień
Kanały powiadomień możesz usunąć, wywołując metodę
deleteNotificationChannel().
Poniższy przykładowy kod pokazuje, jak to zrobić:
// The id of the channel.
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val id: String = "my_channel_01"
notificationManager.deleteNotificationChannel(id)
Tworzenie grupy kanałów powiadomień
Jeśli chcesz dokładniej uporządkować wygląd kanałów w interfejsie ustawień, możesz utworzyć grupy kanałów. Jest to przydatne, gdy aplikacja obsługuje wielu użytkowników, ponieważ umożliwia utworzenie grupy kanałów powiadomień dla każdego konta. Grupy kanałów pomagają użytkownikom odróżniać i kontrolować wiele kanałów powiadomień o identycznych nazwach.
Rysunek 2. Ustawienia kanałów powiadomień z grupami dla kont osobistych i służbowych.
Na przykład aplikacja do obsługi sieci społecznościowych może obsługiwać konta osobiste i służbowe. W takiej sytuacji każde konto może wymagać wielu kanałów powiadomień o identycznych funkcjach i nazwach, np.:
Konto osobiste z 2 kanałami:
Nowe komentarze
Rekomendacje dotyczące postów
Konto firmowe z 2 kanałami:
Nowe komentarze
Rekomendacje dotyczące postów
Uporządkowanie kanałów powiadomień w grupy dla każdego konta ułatwia użytkownikom odróżnianie ich od siebie.
Każda grupa kanałów powiadomień wymaga identyfikatora, który musi być unikalny w pakiecie, a także nazwy widocznej dla użytkownika. Poniższy fragment kodu pokazuje, jak utworzyć grupę kanałów powiadomień.
// The id of the group.
val groupId = "my_group_01"
// The user-visible name of the group.
val groupName = getString(R.string.group_name)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
<b>notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))</b>
Po utworzeniu nowej grupy możesz wywołać
setGroup(), aby powiązać z nią nowy obiekt NotificationChannel.
Po przesłaniu kanału do menedżera powiadomień nie możesz zmienić powiązania między kanałem powiadomień a grupą.