Od Androida 8.0 (poziom interfejsu API 26) 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 danym kanale. Użytkownicy mogą zmienić te ustawienia i określić, które kanały powiadomień w aplikacji mogą być uciążliwe, a które widoczne.
Obejrzyj ten film, by poznać kanały i inne funkcje powiadomień w Androidzie 8.0.
Ustawienia użytkownika dotyczące kanałów powiadomień są dostępne w przypadku każdej aplikacji w ustawieniach systemu, jak widać na ilustracji 1.
Po utworzeniu kanału powiadomień nie możesz zmienić sposobu działania powiadomień. Użytkownik ma wtedy pełną kontrolę. Nadal możesz jednak zmienić nazwę i opis kanału.
Utwórz kanał dla każdego typu powiadomień, jakie chcesz wysyłać. Możesz też utworzyć kanały powiadomień, aby odzwierciedlić 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 reklamy na Androida 8.0 (poziom interfejsu API 26) lub nowszego, musisz zaimplementować co najmniej 1 kanał powiadomień. Jeśli targetSdkVersion
ma wartość 25 lub niższą, to gdy aplikacja działa na Androidzie 8.0 (poziom interfejsu API 26) lub nowszym, będzie działać tak samo jak na urządzeniach z Androidem 7.1 (poziom interfejsu API 25) lub starszym.
Tworzenie kanału powiadomień
Aby utworzyć kanał powiadomień, wykonaj te czynności:
Utwórz obiekt
NotificationChannel
z unikalnym identyfikatorem kanału, nazwą widoczną dla użytkownika i poziomem ważności.Opcjonalnie za pomocą właściwości
setDescription()
możesz określić opis, który użytkownik ma zobaczyć w ustawieniach systemu.Zarejestruj kanał powiadomień, przekazując go do interfejsu
createNotificationChannel()
.
Z przykładu poniżej dowiesz się, jak utworzyć i zarejestrować kanał powiadomień:
Kotlin
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) }
Java
private void createNotificationChannel() { // Create the NotificationChannel, but only on API 26+ because // the NotificationChannel class is not in the Support Library. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name = getString(R.string.channel_name); String description = getString(R.string.channel_description); int importance = NotificationManager.IMPORTANCE_DEFAULT; NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance); channel.setDescription(description); // Register the channel with the system. You can't change the importance // or other notification behaviors after this. NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } }
Odtworzenie istniejącego kanału powiadomień z pierwotnymi wartościami nie wykonuje żadnej operacji, więc można bezpiecznie wywołać ten kod przy uruchamianiu aplikacji.
Domyślnie wszystkie powiadomienia publikowane na danym kanale korzystają z zachowań wizualnych i dźwiękowych określonych przez poziom ważności w klasie NotificationManagerCompat
, np. IMPORTANCE_DEFAULT
lub IMPORTANCE_HIGH
.
Więcej informacji o poziomach ważności znajdziesz w następnej sekcji.
Jeśli chcesz bardziej dostosować domyślne ustawienia powiadomień na swoim kanale, możesz wywołać metody takie jak enableLights()
, setLightColor()
i setVibrationPattern()
w NotificationChannel
. Pamiętaj, że po utworzeniu kanału nie można zmienić tych ustawień, a użytkownik ma ostateczną kontrolę nad tym, czy dane 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
Znaczenie kanału wpływa na poziom przerw we wszystkich powiadomieniach publikowanych na kanale. Określ je 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 (poziom interfejsu API 25) lub niższym, musisz też dla każdego powiadomienia wywoływać metodę setPriority()
, 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żytkowników, jak pokazano w tej tabeli.
Poziom ważności widoczny dla użytkownika | Znaczenie (Android 8.0 i nowsze) | Priorytet (Android 7.1 i starsze) |
---|---|---|
Pilne Włącza dźwięk i pojawia się jako powiadomienie z ostrzeżeniem. |
IMPORTANCE_HIGH |
PRIORITY_HIGH lub PRIORITY_MAX |
Wysoka Wydaje dźwięk. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
Średnia Nie wydaje dźwięku. |
IMPORTANCE_LOW |
PRIORITY_LOW |
Niska 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 cieniu. |
IMPORTANCE_NONE |
N/A |
Wszystkie powiadomienia, niezależnie od ich ważności, są wyświetlane w miejscach, które nie zakłócają pracy systemu, takich jak panel powiadomień czy plakietka na ikonie programu uruchamiającego, ale możesz zmienić jej wygląd.
Po przesłaniu kanału do NotificationManager
nie można już zmienić poziomu ważności. Użytkownik może jednak w każdej chwili zmienić swoje ustawienia kanałów aplikacji.
Informacje o wyborze odpowiedniego poziomu priorytetu znajdziesz w sekcji „Poziomy priorytetów” w przewodniku po projektowaniu powiadomień.
Odczytywanie ustawień kanału powiadomień
Użytkownicy mogą zmieniać ustawienia kanałów powiadomień, w tym zachowania takie jak wibracje i dźwięk alertów. Aby dowiedzieć się, jakie ustawienia użytkownik stosuje w Twoich kanałach powiadomień, wykonaj te czynności:
Pobierz obiekt
NotificationChannel
, wywołującgetNotificationChannel()
lubgetNotificationChannels()
.Wyślij zapytanie dotyczące ustawień kanału, takich jak
getVibrationPattern()
,getSound()
igetImportance()
.
Jeśli wykryjesz ustawienie kanału, które Twoim zdaniem uniemożliwia prawidłowe działanie aplikacji, możesz zaproponować użytkownikowi zmianę tego ustawienia i wykonać działanie powodują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 automatycznie zmieniać wyglądu i dźwięku tego kanału. Tylko użytkownik może zmienić zachowanie kanału w ustawieniach systemu. Aby zapewnić użytkownikom łatwy dostęp do tych ustawień powiadomień, dodaj w interfejsie ustawień aplikacji element, który będzie otwierał te ustawienia systemowe.
Aby otworzyć ustawienia systemowe kanałów powiadomień, kliknij ikonę Intent
, która używa działania ACTION_CHANNEL_NOTIFICATION_SETTINGS
.
Na przykład ten przykładowy kod pokazuje, jak możesz przekierować użytkownika do ustawień kanału powiadomień:
Kotlin
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, packageName) putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()) } startActivity(intent)
Java
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()); startActivity(intent);
Zwróć uwagę, że intencja wymaga 2 dodatkowych elementów określających nazwę pakietu aplikacji (nazywanego też identyfikatorem aplikacji) oraz kanału do edycji.
Usuwanie kanału powiadomień
Możesz usunąć kanały powiadomień, dzwoniąc pod numer
deleteNotificationChannel()
.
Ten przykładowy kod ilustruje, jak wykonać ten proces:
Kotlin
// The id of the channel. val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val id: String = "my_channel_01" notificationManager.deleteNotificationChannel(id)
Java
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // The id of the channel. String id = "my_channel_01"; notificationManager.deleteNotificationChannel(id);
Tworzenie grupy kanałów powiadomień
Jeśli chcesz bardziej uporządkować wygląd swoich kanałów w ustawieniach interfejsu, możesz utworzyć grupy kanałów. Jest to dobry pomysł, gdy aplikacja obsługuje wiele kont użytkowników, np. profile służbowe, bo pozwala utworzyć grupę kanałów powiadomień dla każdego konta. Dzięki temu użytkownicy mogą łatwo rozpoznawać wiele kanałów powiadomień o identycznych nazwach i nimi zarządzać.
Na przykład aplikacja społecznościowa może obsługiwać konta osobiste i służbowe. W takiej sytuacji każde konto może wymagać kilku kanałów powiadomień o identycznych funkcjach i nazwach, takich jak:
Konto osobiste z 2 kanałami:
Nowe komentarze
Rekomendacje postów
Konto firmowe z 2 kanałami:
Nowe komentarze
Rekomendacje postów
Uporządkowanie kanałów powiadomień w grupy dla poszczególnych kont umożliwia użytkownikom rozróżnianie kanałów.
Każda grupa kanałów powiadomień wymaga identyfikatora, który musi być unikalny w obrębie pakietu, a także nazwy widocznej dla użytkownika. Ten fragment kodu pokazuje, jak utworzyć grupę kanałów powiadomień.
Kotlin
// 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 notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
Java
// The id of the group. String groupId = "my_group_01"; // The user-visible name of the group. CharSequence groupName = getString(R.string.group_name); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannelGroup(new 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ą.