Począwszy od Androida 8.0 (poziom interfejsu API 26) wszystkie powiadomienia muszą być przypisane do kanał. W każdym kanale możesz ustawić zachowanie wizualne i słuchowe, będzie stosowane do wszystkich powiadomień na tym kanale. Użytkownicy mogą zmienić te ustawienia i określić, które kanały powiadomień z aplikacji mogą być uciążliwe lub widoczne.
Obejrzyj ten film, aby poznać omówienie kanałów i inne powiadomienia w Androidzie 8.0.
Ustawienia użytkownika dla kanałów powiadomień są dostępne dla każdej aplikacji w ustawień systemu, jak pokazano na rys. 1.
Po utworzeniu kanału powiadomień nie można go zmienić zachowań. W tym momencie użytkownik ma pełną kontrolę. Nadal możesz jednak zmienić nazwę i opis kanału.
Utwórz osobny kanał dla każdego rodzaju powiadomień, które chcesz wysyłać. Możesz też tworzyć kanały powiadomień w celu odzwierciedlenia wyborów dokonanych przez użytkowników. Na przykład: mogą skonfigurować osobne kanały powiadomień dla każdej grupy utworzonej przez użytkownik w aplikacji do obsługi wiadomości.
Aby kierować aplikację na Androida 8.0 (poziom interfejsu API 26) lub nowszego, musisz zaimplementować jeden lub
więcej kanałów powiadomień. Jeśli targetSdkVersion
ma wartość 25 lub niższą,
gdy aplikacja działa na Androidzie 8.0 (poziom interfejsu API 26) lub nowszym, działa
tak jak na urządzeniach z Androidem 7.1 (poziom interfejsu API 25) lub starszym.
Tworzenie kanału powiadomień
Aby utworzyć kanał powiadomień:
Utwórz
NotificationChannel
obiekt z unikalnym identyfikatorem kanału, nazwą widoczną dla użytkownika oraz poziomem ważności.Opcjonalnie określ opis, który użytkownik zobaczy w ustawieniach systemu z
setDescription()
Zarejestruj kanał powiadomień, przekazując go do
createNotificationChannel()
Poniższy przykład pokazuje, 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 jego oryginalnymi wartościami nie przynosi żadnego efektu więc można bezpiecznie wywoływać ten kod przy uruchamianiu aplikacji.
Domyślnie wszystkie powiadomienia publikowane na danym kanale zawierają elementy wizualne
zachowań słuchowych zdefiniowanych przez poziom ważności
NotificationManagerCompat
klasa, na przykład
IMPORTANCE_DEFAULT
lub
IMPORTANCE_HIGH
.
Więcej informacji na ten temat znajdziesz w następnej sekcji
poziomy ważności.
Jeśli chcesz jeszcze bardziej dostosować domyślne działanie powiadomień na kanale,
można wywoływać metody, takie jak
enableLights()
setLightColor()
,
oraz
setVibrationPattern()
w: NotificationChannel
. Pamiętaj, że po utworzeniu kanału
nie może ich zmienić. Użytkownik ma ostateczną kontrolę nad tym,
takie zachowania są aktywne.
Możesz też utworzyć wiele kanałów powiadomień w pojedynczej operacji przez:
połączenia
createNotificationChannels()
Ustawianie poziomu ważności
Znaczenie kanału wpływa na poziom zakłóceń we wszystkich powiadomieniach publikowanych w
kanału. Określ ją w konstruktorze NotificationChannel
, używając jednego z tych elementów:
na 5 poziomach ważności:
IMPORTANCE_NONE(0)
.
do
IMPORTANCE_HIGH(4)
Aby zapewnić obsługę urządzeń z Androidem 7.1 (poziom interfejsu API 25) lub niższym, musisz też
zadzwoń
setPriority()
dla każdego powiadomienia, używając stałej wartości priorytetu z parametrów
NotificationCompat
zajęcia.
Znaczenie (NotificationManager.IMPORTANCE_*
) i priorytet
Stałe (NotificationCompat.PRIORITY_*
) są mapowane na znaczenie widoczne dla użytkownika
zgodnie z poniższą tabelą.
Poziom ważności widoczny dla użytkowników | Znaczenie (Android 8.0 lub nowszy) | Priorytet (Android 7.1 i starsze) |
---|---|---|
Pilne Włącza dźwięk i wyświetla się jako powiadomienie HUD. |
IMPORTANCE_HIGH |
PRIORITY_HIGH lub PRIORITY_MAX |
Wysoki Wydaje dźwięk. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
Średnia Nie słychać dźwięku. |
IMPORTANCE_LOW |
PRIORITY_LOW |
Niska Nie odtwarza dźwięku i nie jest wyświetlana na pasku stanu. |
IMPORTANCE_MIN |
PRIORITY_MIN |
Brak Nie odtwarza dźwięku i nie jest wyświetlana na pasku stanu ani w obszarze powiadomień. |
IMPORTANCE_NONE |
N/A |
Wszystkie powiadomienia, niezależnie od ich ważności, pojawiają się w systemie nieprzerwanym lokalizacje interfejsu, takie jak panel powiadomień czy plakietkę na ikonie programu uruchamiającego, chociaż możesz zmienić wygląd plakietki powiadomienia.
Gdy prześlesz kanał do
NotificationManager
, Ty
Nie można zmienić poziomu ważności. Użytkownik może jednak zmienić swoje
ustawienia kanałów aplikacji.
Informacje na temat wyboru odpowiedniego priorytetu można znaleźć w sekcji „Priorytet” poziomy” w Przewodnik po projektowaniu powiadomień.
Odczytywanie ustawień kanału powiadomień
Użytkownicy mogą modyfikować ustawienia kanałów powiadomień, w tym również działania takie jak wibracje i dźwięk alertu. Jeśli chcesz poznać ustawienia użytkownika dotyczące Twoich kanałów powiadomień, wykonaj te czynności:
Pobierz obiekt
NotificationChannel
, wywołującgetNotificationChannel()
. lubgetNotificationChannels()
Zapytanie o ustawienia kanału, takie jak
getVibrationPattern()
getSound()
igetImportance()
.
Jeśli wykryjesz ustawienie kanału, które Twoim zdaniem przeszkadza w zamierzonym działaniu aplikacji, można zasugerować użytkownikowi zmianę i wykonanie działania otwórz ustawienia kanału, jak pokazano w następnej sekcji.
Otwórz ustawienia kanału powiadomień
Po utworzeniu kanału powiadomień nie można go zmienić działania wizualne i słuchowe na kanale w sposób zautomatyzowany. Tylko użytkownik może zmienić zachowanie kanału w ustawieniach systemowych. Aby udostępnić użytkownikom aby mieć łatwy dostęp do tych ustawień powiadomień, dodaj element w ustawienia, który otwiera te ustawienia systemowe.
Możesz otworzyć ustawienia systemowe dla kanałów powiadomień z
Intent
, która korzysta z funkcji
ACTION_CHANNEL_NOTIFICATION_SETTINGS
działania.
Na przykład ten przykładowy kod pokazuje, jak można przekierować użytkownika do ustawienia 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 dodatków, które określają nazwę pakietu aplikacji (nazywany też identyfikatorem aplikacji) i kanału, który ma być edytowany.
Usuwanie kanału powiadomień
Możesz usunąć kanały powiadomień, dzwoniąc pod numer
deleteNotificationChannel()
Następujący przykładowy kod ilustruje, jak ukończyć 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 lepiej 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, na przykład profili służbowych, ponieważ pozwala grupę kanałów powiadomień dla każdego konta. W ten sposób użytkownicy mogą łatwo zidentyfikować i kontrolować wiele kanałów powiadomień o identycznych nazwach.
Na przykład aplikacja społecznościowa może zapewniać pomoc w zakresie prywatnych i służbowych kont. W takiej sytuacji każde konto może wymagać wielu powiadomień. kanały o identycznych funkcjach i nazwach, na przykład:
Konto osobiste z dwoma kanałami:
Nowe komentarze
Rekomendacje postów
Konto firmowe z dwoma kanałami:
Nowe komentarze
Rekomendacje postów
Pogrupowanie kanałów powiadomień w grupy dla każdego konta pozwala użytkownikom rozróżniać między nimi.
Każda grupa kanałów powiadomień wymaga identyfikatora, który musi być niepowtarzalny w obrębie oraz nazwę widoczną dla użytkownika. Ten fragment kodu pokazuje, aby 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 zadzwonić pod numer
setGroup()
, aby powiązać z grupą nowy obiekt NotificationChannel
.
Po przesłaniu kanału do menedżera powiadomień nie możesz zmienić powiązanie między kanałem powiadomień a grupą.