Benachrichtigungskanäle erstellen und verwalten

Ab Android 8.0 (API-Ebene 26) müssen alle Benachrichtigungen einem Kanal zugewiesen sein. Sie können für jeden Kanal das visuelle und akustische Verhalten festlegen, das auf alle Benachrichtigungen in diesem Kanal angewendet wird. Nutzer können diese Einstellungen ändern und entscheiden, welche Benachrichtigungskanäle Ihrer App aufdringlich oder sichtbar sein sollen.

Das folgende Video bietet einen Überblick über Kanäle und andere Benachrichtigungsfunktionen in Android 8.0.

Die Nutzereinstellungen für Benachrichtigungskanäle sind für jede App in den Systemeinstellungen verfügbar (siehe Abbildung 1).

Abbildung 1: Benachrichtigungseinstellungen für die Uhr-App und einen ihrer Kanäle.

Nachdem Sie einen Benachrichtigungskanal erstellt haben, können Sie das Benachrichtigungsverhalten nicht mehr ändern. Der Nutzer hat ab diesem Zeitpunkt die vollständige Kontrolle. Name und Beschreibung eines Kanals kannst du aber weiterhin ändern.

Erstelle einen Kanal für jeden zu sendenden Benachrichtigungstyp. Sie können auch Benachrichtigungskanäle erstellen, um die von den Nutzern getroffenen Entscheidungen widerzuspiegeln. Sie können beispielsweise separate Benachrichtigungskanäle für jede Unterhaltungsgruppe einrichten, die von einem Nutzer in einer Messaging-App erstellt wurde.

Wenn Sie eine Ausrichtung auf Android 8.0 (API-Level 26) oder höher vornehmen, müssen Sie einen oder mehrere Benachrichtigungskanäle implementieren. Wenn targetSdkVersion auf 25 oder niedriger festgelegt ist und deine App unter Android 8.0 (API-Level 26) oder höher ausgeführt wird, verhält sie sich genauso wie auf Geräten mit Android 7.1 (API-Level 25) oder niedriger.

Benachrichtigungskanal erstellen

So erstellen Sie einen Benachrichtigungskanal:

  1. Erstelle ein NotificationChannel-Objekt mit einer eindeutigen Kanal-ID, einem für Nutzer sichtbaren Namen und einer Prioritätsstufe.

  2. Optional können Sie mit setDescription() die Beschreibung angeben, die der Nutzer in den Systemeinstellungen sieht.

  3. Übergeben Sie den Benachrichtigungskanal an createNotificationChannel(), um ihn zu registrieren.

Das folgende Beispiel zeigt, wie ein Benachrichtigungskanal erstellt und registriert wird:

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);
    }
}

Beim Neuerstellen eines vorhandenen Benachrichtigungskanals mit seinen ursprünglichen Werten wird kein Vorgang ausgeführt. Daher kann dieser Code beim Starten einer Anwendung bedenkenlos aufgerufen werden.

Standardmäßig verwenden alle Benachrichtigungen, die an einen bestimmten Kanal gesendet werden, das visuelle und akustische Verhalten, das durch die Wichtigkeitsstufe der Klasse NotificationManagerCompat definiert wird, z. B. IMPORTANCE_DEFAULT oder IMPORTANCE_HIGH. Weitere Informationen zu Wichtigkeitsstufen finden Sie im nächsten Abschnitt.

Wenn du das Standardverhalten für Benachrichtigungen deines Kanals weiter anpassen möchtest, kannst du Methoden wie enableLights(), setLightColor() und setVibrationPattern() im NotificationChannel aufrufen. Sobald Sie den Kanal erstellt haben, können Sie diese Einstellungen nicht mehr ändern und der Nutzer hat die endgültige Kontrolle darüber, ob diese Verhaltensweisen aktiv sind.

Sie können auch mehrere Benachrichtigungskanäle in einem einzigen Vorgang erstellen, indem Sie createNotificationChannels() aufrufen.

Wichtigkeitsstufe festlegen

Die Kanalwichtigkeit wirkt sich auf die Unterbrechungsstufe aller auf dem Kanal geposteten Benachrichtigungen aus. Geben Sie ihn im NotificationChannel-Konstruktor mit einer von fünf Wichtigkeitsstufen an, die von IMPORTANCE_NONE(0) bis IMPORTANCE_HIGH(4) reichen.

Zur Unterstützung von Geräten mit Android 7.1 (API-Level 25) oder niedriger müssen Sie für jede Benachrichtigung auch setPriority() aufrufen. Verwenden Sie dazu eine Prioritätskonstante aus der Klasse NotificationCompat.

Die Konstanten für die Wichtigkeit (NotificationManager.IMPORTANCE_*) und die Prioritätskonstanten (NotificationCompat.PRIORITY_*) sind den für Nutzer sichtbaren Optionen für die Wichtigkeit zugeordnet, wie in der folgenden Tabelle dargestellt.

Für den Nutzer sichtbare Prioritätsstufe Wichtigkeit (Android 8.0 und höher) Priorität (Android 7.1 und niedriger)
Dringend
Ein akustisches Signal ertönt und wird als Vorabbenachrichtigung angezeigt.
IMPORTANCE_HIGH PRIORITY_HIGH oder PRIORITY_MAX
Hoch
Erzeugt einen Ton.
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
Mittel
Der Ton macht keinen Ton.
IMPORTANCE_LOW PRIORITY_LOW
Niedrig
Das Gerät gibt keinen Ton aus und wird nicht in der Statusleiste angezeigt.
IMPORTANCE_MIN PRIORITY_MIN
Keine
Der Nutzer gibt keinen Ton aus und wird nicht in der Statusleiste oder in der Leiste angezeigt.
IMPORTANCE_NONE N/A

Alle Benachrichtigungen werden unabhängig von ihrer Wichtigkeit an nicht störenden Bereichen der Systemoberfläche angezeigt, z. B. auf der Benachrichtigungsleiste und als Badge auf dem Launcher-Symbol. Sie können aber auch das Aussehen des Benachrichtigungssymbols ändern.

Nachdem du den Kanal für den NotificationManager eingereicht hast, kann die Wichtigkeitsstufe nicht mehr geändert werden. Nutzer können jedoch ihre Einstellungen für die Kanäle Ihrer App jederzeit ändern.

Informationen zur Auswahl einer geeigneten Prioritätsstufe finden Sie unter „Prioritätsebenen“ im Leitfaden zur Gestaltung von Benachrichtigungen.

Einstellungen für Benachrichtigungskanal lesen

Nutzer können die Einstellungen für Benachrichtigungskanäle ändern, einschließlich Verhaltensweisen wie Vibration und Warnton. Wenn Sie wissen möchten, welche Einstellungen ein Nutzer für Ihre Benachrichtigungskanäle anwendet, gehen Sie so vor:

  1. Rufen Sie das NotificationChannel-Objekt ab, indem Sie getNotificationChannel() oder getNotificationChannels() aufrufen.

  2. Fragen Sie bestimmte Kanaleinstellungen wie getVibrationPattern(), getSound() und getImportance() ab.

Wenn Sie eine Kanaleinstellung feststellen, die Ihrer Meinung nach das beabsichtigte Verhalten Ihrer App verhindert, können Sie dem Nutzer vorschlagen, sie zu ändern und eine Aktion zum Öffnen der Kanaleinstellungen zu ermöglichen, wie im nächsten Abschnitt gezeigt.

Einstellungen für Benachrichtigungskanal öffnen

Nachdem Sie einen Benachrichtigungskanal erstellt haben, können Sie sein visuelles und akustisches Verhalten nicht mehr programmatisch ändern. Nur der Nutzer kann das Kanalverhalten über die Systemeinstellungen ändern. Damit deine Nutzer einfachen Zugriff auf diese Benachrichtigungseinstellungen haben, füge in der Einstellungs-UI deiner App ein Element hinzu, über das diese Systemeinstellungen geöffnet werden.

Sie können die Systemeinstellungen für Benachrichtigungskanäle mit einem Intent öffnen, das die ACTION_CHANNEL_NOTIFICATION_SETTINGS-Aktion verwendet.

Der folgende Beispielcode zeigt, wie Sie einen Nutzer zu den Einstellungen für einen Benachrichtigungskanal weiterleiten können:

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);

Beachten Sie, dass für den Intent zwei Extras erforderlich sind, die den Paketnamen Ihrer App (auch als Anwendungs-ID bezeichnet) und den zu bearbeitenden Kanal angeben.

Benachrichtigungskanal löschen

Sie können Benachrichtigungskanäle durch Aufrufen von deleteNotificationChannel() löschen. Der folgende Beispielcode zeigt, wie dieser Vorgang abgeschlossen wird:

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);

Benachrichtigungskanalgruppe erstellen

Wenn Sie die Darstellung Ihrer Kanäle in der Benutzeroberfläche für Einstellungen weiter organisieren möchten, können Sie Channelgruppen erstellen. Dies ist zu empfehlen, wenn Ihre Anwendung mehrere Nutzerkonten unterstützt, z. B. für Arbeitsprofile, da Sie damit für jedes Konto eine Benachrichtigungskanalgruppe erstellen können. Auf diese Weise können Nutzer leicht mehrere Benachrichtigungskanäle mit identischen Namen identifizieren und steuern.

Abbildung 2: Einstellungen für Benachrichtigungskanäle mit Gruppen für private und berufliche Konten.

Zum Beispiel kann eine Anwendung für soziale Netzwerke Unterstützung für private und berufliche Konten beinhalten. In diesem Szenario benötigt jedes Konto möglicherweise mehrere Benachrichtigungskanäle mit identischen Funktionen und Namen. Beispiele:

  • Ein privates Konto mit zwei Kanälen:

    • Neue Kommentare

    • Empfehlungen für Beiträge

  • Ein Geschäftskonto mit zwei Kanälen:

    • Neue Kommentare

    • Empfehlungen für Beiträge

Durch das Organisieren der Benachrichtigungskanäle in Gruppen für jedes Konto können Nutzer zwischen ihnen unterscheiden.

Für jede Benachrichtigungskanalgruppe sind eine ID, die innerhalb Ihres Pakets eindeutig sein muss, sowie ein für den Nutzer sichtbarer Name erforderlich. Das folgende Snippet zeigt, wie eine Benachrichtigungskanalgruppe erstellt wird.

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));

Nachdem du eine neue Gruppe erstellt hast, kannst du setGroup() aufrufen, um ein neues NotificationChannel-Objekt mit der Gruppe zu verknüpfen.

Nachdem Sie den Kanal an den Benachrichtigungsmanager gesendet haben, können Sie die Verknüpfung zwischen Benachrichtigungskanal und Gruppe nicht mehr ändern.