Benachrichtigungskanäle erstellen und verwalten

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

Im folgenden Video erhalten Sie 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, wie in Abbildung 1 dargestellt.

Abbildung 1: Benachrichtigungseinstellungen der Uhr App und von einem ihrer Kanäle.

Nachdem Sie einen Benachrichtigungschannel erstellt haben, können Sie das Benachrichtigungsverhalten nicht mehr ändern. Der Nutzer hat dann die vollständige Kontrolle. Du kannst den Namen und die Beschreibung eines Kanals aber weiterhin ändern.

Erstellen Sie einen Kanal für jeden Benachrichtigungstyp, den Sie senden müssen. Sie können auch Benachrichtigungskanäle erstellen, die auf Entscheidungen von Nutzern basieren. So können beispielsweise separate Benachrichtigungskanäle für jede Konversationsgruppe eingerichtet werden, die vom Nutzer in einer App zum Nachrichtenversand erstellt wird.

Wenn Sie Android 8.0 (API‑Level 26) oder höher als Zielplattform festlegen, müssen Sie einen oder mehrere Benachrichtigungskanäle implementieren. Wenn targetSdkVersion auf 25 oder niedriger festgelegt ist, verhält sich Ihre 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. Erstellen Sie ein NotificationChannel-Objekt mit einer eindeutigen Channel-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.

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

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

Standardmäßig verwenden alle Benachrichtigungen, die in einem bestimmten Channel veröffentlicht 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 Sie das Standardbenachrichtigungsverhalten Ihres Kanals weiter anpassen möchten, können Sie Methoden wie enableLights(), setLightColor() und setVibrationPattern() für die NotificationChannel aufrufen. Nachdem Sie den Channel erstellt haben, können Sie diese Einstellungen nicht mehr ändern. 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 Benachrichtigungen aus, die im Kanal gepostet werden. Geben Sie sie im NotificationChannel-Konstruktor an. Verwenden Sie dazu eine von fünf Wichtigkeitsstufen, die von IMPORTANCE_NONE(0) bis IMPORTANCE_HIGH(4) reichen.

Wenn Sie Geräte mit Android 7.1 (API-Level 25) oder niedriger unterstützen möchten, müssen Sie auch setPriority() für jede Benachrichtigung 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 Nutzer sichtbaren Optionen für die Wichtigkeit 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
Akustisches Signal ertönt, Vorabbenachrichtigung wird angezeigt
IMPORTANCE_HIGH PRIORITY_HIGH oder PRIORITY_MAX
Hoch
Akustisches Signal ertönt.
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
Mittel
Kein Ton.
IMPORTANCE_LOW PRIORITY_LOW
Niedrig
Kein akustisches Signal und wird nicht auf der Statusleiste angezeigt.
IMPORTANCE_MIN PRIORITY_MIN
Kein
Es ertönt kein Signal und die Benachrichtigung wird nicht in der Statusleiste oder der Benachrichtigungsleiste angezeigt.
IMPORTANCE_NONE N/A

Alle Benachrichtigungen werden unabhängig von der Wichtigkeit an nicht störenden Stellen auf der Systembenutzeroberfläche angezeigt, z. B. auf der Benachrichtigungsleiste und als Kennzeichen auf dem Launcher-Symbol. Das Design des Benachrichtigungskennzeichens kann geändert werden.

Nachdem Sie den Channel an die NotificationManager gesendet haben, können Sie die Wichtigkeitsstufe nicht mehr ändern. Der Nutzer kann seine Einstellungen für die Kanäle Ihrer App jedoch jederzeit ändern.

Informationen zur Auswahl einer geeigneten Prioritätsstufe finden Sie im Benachrichtigungs-Designleitfaden 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 sehen Sie, welche Einstellungen ein Nutzer für Ihre Benachrichtigungskanäle verwendet:

  1. Rufen Sie das Objekt NotificationChannel mit getNotificationChannel() oder getNotificationChannels() ab.

  2. Sie können bestimmte Kanaleinstellungen wie getVibrationPattern(), getSound() und getImportance() abfragen.

Wenn Sie eine Kanaleinstellung erkennen, die das beabsichtigte Verhalten Ihrer App beeinträchtigt, können Sie dem Nutzer vorschlagen, sie zu ändern, und eine Aktion zum Öffnen der Kanaleinstellungen bereitstellen, wie im nächsten Abschnitt gezeigt.

Einstellungen für Benachrichtigungskanäle öffnen

Nachdem Sie einen Benachrichtigungschannel erstellt haben, können Sie das visuelle und akustische Verhalten des Benachrichtigungschannels nicht mehr programmatisch ändern. Nur der Nutzer kann das Verhalten des Kanals in den Systemeinstellungen ändern. Damit Nutzer einfach auf diese Benachrichtigungseinstellungen zugreifen können, fügen Sie in der Benutzeroberfläche der Einstellungen Ihrer App ein Element hinzu, mit dem diese Systemeinstellungen geöffnet werden.

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

Im folgenden Beispielcode sehen Sie, wie Sie einen Nutzer zu den Einstellungen für einen Benachrichtigungschannel 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);

Für den Intent sind zwei Extras erforderlich, die den Paketnamen Ihrer App (auch als Anwendungs-ID bezeichnet) und den zu bearbeitenden Channel angeben.

Benachrichtigungskanal löschen

Sie können Benachrichtigungskanäle löschen, indem Sie deleteNotificationChannel() aufrufen. Der folgende Beispielcode veranschaulicht diesen Prozess:

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 Channels in der Benutzeroberfläche der Einstellungen weiter organisieren möchten, können Sie Channelgruppen erstellen. Das ist sinnvoll, wenn Ihre App mehrere Nutzerkonten unterstützt, z. B. für Arbeitsprofile, da Sie so für jedes Konto eine Benachrichtigungschannelgruppe erstellen können. So können Nutzer mehrere Benachrichtigungskanäle mit identischen Namen leichter identifizieren und verwalten.

Abbildung 2: Einstellungen für Benachrichtigungschannels mit Gruppen für private Konten und Arbeitskonten.

Eine App für soziale Netzwerke kann beispielsweise Unterstützung für private und Arbeitskonten bieten. In diesem Szenario sind für jedes Konto möglicherweise mehrere Benachrichtigungschannels mit identischen Funktionen und Namen erforderlich, z. B.:

  • Ein privates Konto mit zwei Kanälen:

    • Neue Kommentare

    • Beitragsempfehlungen

  • Ein Geschäftskonto mit zwei Kanälen:

    • Neue Kommentare

    • Beitragsempfehlungen

Wenn Sie die Benachrichtigungskanäle für jedes Konto in Gruppen organisieren, können Nutzer sie besser unterscheiden.

Jede Benachrichtigungskanalgruppe benötigt eine ID, die innerhalb Ihres Pakets eindeutig sein muss, sowie einen für Nutzer sichtbaren Namen. 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 Sie eine neue Gruppe erstellt haben, können Sie setGroup() aufrufen, um der Gruppe ein neues NotificationChannel-Objekt zuzuweisen.

Sobald Sie den Channel an den Benachrichtigungsmanager gesendet haben, können Sie die Zuordnung zwischen Benachrichtigungschannel und Gruppe nicht mehr ändern.