Benachrichtigungskanäle erstellen und verwalten

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

Im folgenden Video findest du eine Übersicht ü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, wie in Abbildung 1 dargestellt.

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 dann die vollständige Kontrolle. Sie können jedoch weiterhin den Namen und die Beschreibung eines Kanals ändern.

Erstellen Sie für jeden Benachrichtigungstyp, den Sie senden möchten, einen Kanal. Sie können auch Benachrichtigungskanäle erstellen, um die von 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 Android 8.0 (API-Level 26) oder höher als Ziel verwenden, müssen Sie einen oder mehrere Benachrichtigungskanäle implementieren. Wenn targetSdkVersion auf 25 oder niedriger festgelegt ist, verhält sich die App unter Android 8.0 (API-Level 26) oder höher 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 Wichtigkeitsstufe.

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

  3. Registrieren Sie den Benachrichtigungskanal, indem Sie ihn an createNotificationChannel() übergeben.

Im folgenden Beispiel wird gezeigt, wie Sie einen Benachrichtigungskanal erstellen und registrieren:

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

Wenn Sie einen vorhandenen Benachrichtigungskanal mit seinen ursprünglichen Werten neu erstellen, wird kein Vorgang ausgeführt. Sie können diesen Code also beim Starten einer Anwendung aufrufen.

Standardmäßig werden für alle Benachrichtigungen, die in einem bestimmten Kanal gepostet werden, die visuellen und akustischen Verhaltensweisen verwendet, die durch die Wichtigkeitsstufe der Klasse NotificationManagerCompat definiert sind, z. B. IMPORTANCE_DEFAULT oder IMPORTANCE_HIGH. Weitere Informationen zu Wichtigkeitsstufen finden Sie im nächsten Abschnitt.

Wenn Sie das Standardverhalten für Benachrichtigungen Ihres Kanals weiter anpassen möchten, können Sie Methoden wie enableLights(), setLightColor() und setVibrationPattern() für NotificationChannel aufrufen. Denken Sie daran, dass Sie diese Einstellungen nach dem Erstellen des Kanals nicht mehr ändern können und der Nutzer die endgültige Kontrolle darüber hat, ob diese Verhaltensweisen aktiv sind.

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

Wichtigkeitsstufe festlegen

Die Wichtigkeit des Kanals wirkt sich auf die Unterbrechungsstufe aller im Kanal geposteten Benachrichtigungen aus. Geben Sie sie im NotificationChannel-Konstruktor an. Verwenden Sie dazu eine von fünf Wichtigkeitsstufen, von IMPORTANCE_NONE(0) bis IMPORTANCE_HIGH(4).

Wenn Sie Geräte mit Android 7.1 (API-Level 25) oder niedriger unterstützen möchten, müssen Sie für jede Benachrichtigung auch setPriority() aufrufen und dabei eine Prioritätskonstante aus der Klasse NotificationCompat verwenden.

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

Für Nutzer sichtbare Prioritätsstufe Wichtigkeit (Android 8.0 und höher) Priorität (Android 7.1 und niedriger)
Dringend
Es wird ein Ton abgespielt und die Benachrichtigung wird als wichtige Benachrichtigung angezeigt.
IMPORTANCE_HIGH PRIORITY_HIGH oder PRIORITY_MAX
Hoch
Es wird ein Ton abgespielt.
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
Mittel
Kein Ton.
IMPORTANCE_LOW PRIORITY_LOW
Niedrig
Es wird kein Ton abgespielt und die Benachrichtigung wird nicht in der Statusleiste angezeigt.
IMPORTANCE_MIN PRIORITY_MIN
Keine
Es wird kein Ton abgespielt und die Benachrichtigung wird weder in der Statusleiste noch in der Benachrichtigungsleiste angezeigt.
IMPORTANCE_NONE N/A

Alle Benachrichtigungen, unabhängig von ihrer Wichtigkeit, werden an nicht störenden Stellen der System-UI angezeigt, z. B. in der Benachrichtigungsleiste und als Badge auf dem Launcher-Symbol. Du kannst jedoch das Erscheinungsbild des Benachrichtigungs-Badges ändern.

Nachdem du den Kanal an den NotificationManager gesendet hast, kannst du die Wichtigkeitsstufe nicht mehr ändern. Der Nutzer kann seine Einstellungen für die Kanäle deiner App jedoch jederzeit ändern.

Informationen zur Auswahl einer geeigneten Prioritätsstufe finden Sie im Designleitfaden für Benachrichtigungen unter „Prioritätsstufen“.

Einstellungen für Benachrichtigungskanäle lesen

Nutzer können die Einstellungen für Benachrichtigungskanäle ändern, einschließlich des Verhaltens wie Vibration und Benachrichtigungston. So finden Sie heraus, welche Einstellungen ein Nutzer auf Ihre Benachrichtigungskanäle anwendet:

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

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

Wenn ihr eine Kanaleinstellung findet, die eurer Meinung nach das beabsichtigte Verhalten eurer App verhindert, könnt ihr dem Nutzer vorschlagen, sie zu ändern, und eine Aktion zum Öffnen der Kanaleinstellungen anbieten, wie im nächsten Abschnitt gezeigt.

Öffnen Sie die Einstellungen für den Benachrichtigungskanal.

Nachdem Sie einen Benachrichtigungskanal erstellt haben, können Sie das visuelle und akustische Verhalten des Benachrichtigungskanals nicht mehr programmatisch ändern. Nur der Nutzer kann das Verhalten der Kanäle in den Systemeinstellungen ändern. Wenn du deinen Nutzern schnellen Zugriff auf diese Benachrichtigungseinstellungen geben möchtest, füge in der Benutzeroberfläche für die Einstellungen 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, der die Aktion ACTION_CHANNEL_NOTIFICATION_SETTINGS verwendet.

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

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

Beachte, dass der Intent zwei Extras erfordert, die den Paketnamen deiner 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 Sie diesen Vorgang ausführen:

val notificationManager =
    ContextCompat.getSystemService<NotificationManager>(context, NotificationManager::class.java)
notificationManager?.deleteNotificationChannel(channelId)

Benachrichtigungskanalgruppe erstellen

Wenn du die Darstellung deiner Kanäle in der Benutzeroberfläche für die Einstellungen weiter organisieren möchtest, kannst du Kanalgruppen erstellen. Das ist eine gute Idee, wenn deine App mehrere Nutzerkonten unterstützt, da du so für jedes Konto eine Benachrichtigungskanalgruppe erstellen kannst. Mithilfe von Kanalgruppen können Nutzer mehrere Benachrichtigungskanäle mit identischen Namen unterscheiden und steuern.

Abbildung 2. Einstellungen für Benachrichtigungskanäle mit Gruppen für private und Arbeitskonten.

Eine App für soziale Netzwerke kann beispielsweise private und geschäftliche Konten unterstützen. In diesem Szenario sind für jedes Konto möglicherweise mehrere Benachrichtigungskanäle mit identischen Funktionen und Namen erforderlich, z. B.:

  • 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

Wenn du die Benachrichtigungskanäle für jedes Konto in Gruppen organisierst, können Nutzer sie voneinander unterscheiden.

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

fun createNotificationChannelGroup(context: Context, groupId: String, groupName: String) {
    val notificationManager =
        ContextCompat.getSystemService(context, NotificationManager::class.java)
    notificationManager?.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
}

Nachdem Sie eine neue Gruppe erstellt haben, können Sie 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.