Tworzenie kanałów powiadomień i zarządzanie nimi

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.

Rysunek 1. Ustawienia powiadomień z aplikacji Zegar i jednym z jej kanałów.

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ń:

  1. Utwórz NotificationChannel obiekt z unikalnym identyfikatorem kanału, nazwą widoczną dla użytkownika oraz poziomem ważności.

  2. Opcjonalnie określ opis, który użytkownik zobaczy w ustawieniach systemu z setDescription()

  3. 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:

  1. Pobierz obiekt NotificationChannel, wywołując getNotificationChannel(). lub getNotificationChannels()

  2. Zapytanie o ustawienia kanału, takie jak getVibrationPattern() getSound() i getImportance().

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.

Rysunek 2. Ustawienia kanału powiadomień: dla kont osobistych i służbowych.

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ą.