W Androidzie 8.0 (interfejs API na poziomie 26) i nowszych wersjach wszystkie powiadomienia muszą być przypisane do kanału. Dla 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ć uciążliwe lub widoczne.
Obejrzyj poniższy 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 systemowych, jak pokazano na rysunku 1.
Po utworzeniu kanału powiadomień nie możesz zmienić zachowań 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 typu powiadomienia, które chcesz wysyłać. Możesz też utworzyć kanały powiadomień, aby odzwierciedlić wybory dokonane przez 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 parametr targetSdkVersion jest ustawiony na 25 lub mniej, aplikacja uruchomiona 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 zobaczy w ustawieniach systemu, za pomocą
setDescription().Zarejestruj kanał powiadomień, przekazując go do
createNotificationChannel().
Ten przykład pokazuje, jak utworzyć i zarejestrować kanał powiadomień:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. 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 = context.getSystemService(NotificationManager::class.java) notificationManager?.createNotificationChannel(mChannel) }
Ponowne utworzenie istniejącego kanału powiadomień z jego pierwotnymi wartościami nie powoduje żadnej operacji, więc możesz bezpiecznie wywołać ten kod podczas uruchamiania aplikacji.
Domyślnie wszystkie powiadomienia opublikowane w danym kanale korzystają z wizualnych i dźwiękowych zachowań określonych przez poziom ważności z klasy NotificationManagerCompat, np. IMPORTANCE_DEFAULT lub IMPORTANCE_HIGH. Więcej informacji o poziomach ważności znajdziesz w następnej sekcji.
Jeśli chcesz dodatkowo dostosować domyślne zachowania powiadomień kanału, możesz wywołać metody takie jak enableLights(), setLightColor() i setVibrationPattern() w obiekcie 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 metodę createNotificationChannels().
Ustawianie poziomu ważności
Ważność kanału wpływa na poziom zakłóceń wszystkich powiadomień opublikowanych w kanale. Określ go w konstruktorze NotificationChannel, używając jednego z 5 poziomów ważności, od IMPORTANCE_NONE(0) do IMPORTANCE_HIGH(4).
Aby obsługiwać urządzenia z Androidem 7.1 (interfejs API na poziomie 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_*) są mapowane na opcje ważności widoczne dla użytkownika, jak pokazano w tabeli poniżej.
| Poziom ważności widoczny dla użytkownika | Ważność (Android 8.0 lub nowszy) | Priorytet (Android 7.1 i starsze wersje) |
|---|---|---|
| Pilne Odtwarza dźwięk i wyświetla powiadomienie z ostrzeżeniem. |
IMPORTANCE_HIGH |
PRIORITY_HIGH lub PRIORITY_MAX |
| Wysoki Odtwarza dźwięk. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
| Średnia Nie wydaje dźwięku. |
IMPORTANCE_LOW |
PRIORITY_LOW |
| Niski Nie wydaje dźwięku i nie pojawia się na pasku stanu. |
IMPORTANCE_MIN |
PRIORITY_MIN |
| Brak Nie wydaje dźwięku 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 niezakłócających pracy miejscach interfejsu systemu, takich jak panel powiadomień i plakietka na ikonie programu uruchamiającego, ale możesz zmienić wygląd plakietki powiadomienia.
Po przesłaniu kanału do NotificationManager nie możesz zmienić poziomu ważności. Użytkownik może jednak w każdej chwili zmienić ustawienia kanałów aplikacji.
Informacje 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 sprawdzić, jakie ustawienia użytkownik stosuje do kanałów powiadomień, wykonaj te czynności:
Pobierz obiekt
NotificationChannel, wywołującgetNotificationChannel()lubgetNotificationChannels().Ustawienia konkretnego kanału zapytania, takie jak
getVibrationPattern(),getSound()igetImportance().
Jeśli wykryjesz ustawienie kanału, które Twoim zdaniem uniemożliwia zamierzone działanie aplikacji, możesz zasugerować użytkownikowi jego zmianę i udostępnić działanie, które otworzy ustawienia kanału, jak pokazano w następnej sekcji.
Otwórz ustawienia kanału powiadomień
Po utworzeniu kanału powiadomień nie możesz automatycznie zmienić jego zachowań wizualnych i dźwiękowych. Tylko użytkownik może zmienić zachowanie kanału w ustawieniach systemowych. 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ą obiektu Intent, który używa działania ACTION_CHANNEL_NOTIFICATION_SETTINGS.
Przykładowy kod poniżej pokazuje, jak przekierować użytkownika do ustawień kanału powiadomień:
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) putExtra(Settings.EXTRA_CHANNEL_ID, CHANNEL_ID) } Button(onClick = { context.startActivity(intent) }) { Text("Open Channel Settings") }
Zwróć uwagę, że intencja wymaga 2 dodatkowych elementów, 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 deleteNotificationChannel().
Poniższy przykładowy kod pokazuje, jak przeprowadzić ten proces:
val notificationManager = ContextCompat.getSystemService<NotificationManager>(context, NotificationManager::class.java) notificationManager?.deleteNotificationChannel(channelId)
Tworzenie grupy kanałów powiadomień
Jeśli chcesz dodatkowo uporządkować wygląd kanałów w interfejsie ustawień, możesz utworzyć grupy kanałów. To dobry pomysł, 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.
Na przykład aplikacja sieci społecznościowej może obsługiwać konta osobiste i służbowe. W tym scenariuszu każde konto może wymagać wielu kanałów powiadomień o identycznych funkcjach i nazwach, takich jak:
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 pozwala użytkownikom je rozróżniać.
Każda grupa kanałów powiadomień wymaga identyfikatora, który musi być unikalny w obrębie pakietu, oraz nazwy widocznej dla użytkownika. Poniższy fragment kodu pokazuje, jak utworzyć grupę kanałów powiadomień.
fun createNotificationChannelGroup(context: Context, groupId: String, groupName: String) { val notificationManager = ContextCompat.getSystemService(context, NotificationManager::class.java) notificationManager?.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName)) }
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ą.