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 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 einen Kanal für jeden Benachrichtigungstyp, den Sie senden müssen. Sie können auch Benachrichtigungskanäle erstellen, die den Entscheidungen der Nutzer entsprechen. 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:
Erstellen Sie ein
NotificationChannel-Objekt mit einer eindeutigen Channel-ID, einem für Nutzer sichtbaren Namen und einer Wichtigkeitsstufe.Optional können Sie mit
setDescription()die Beschreibung angeben, die der Nutzer in den Systemeinstellungen sieht.Registrieren Sie den Benachrichtigungskanal, indem Sie ihn an
createNotificationChannel()übergeben.
Das folgende Beispiel zeigt, wie ein Benachrichtigungskanal erstellt und registriert wird:
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 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 Kanal 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 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-Ebene 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 den 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, wichtige Benachrichtigung wird angezeigt |
IMPORTANCE_HIGH |
PRIORITY_HIGH oder PRIORITY_MAX |
| Hoch Akustisches Signal ertönt. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
| Medium Kein akustisches Signal. |
IMPORTANCE_LOW |
PRIORITY_LOW |
| Niedrig Kein akustisches Signal und wird nicht auf der Statusleiste angezeigt. |
IMPORTANCE_MIN |
PRIORITY_MIN |
| Kein Es wird kein Ton wiedergegeben und die Benachrichtigung wird nicht in der Statusleiste oder in 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 Kanal an NotificationManager gesendet haben, können Sie die Wichtigkeit nicht mehr ändern. Nutzer können ihre Einstellungen für die Kanäle Ihrer 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 sehen Sie, welche Einstellungen ein Nutzer für Ihre Benachrichtigungskanäle verwendet:
Rufen Sie das
NotificationChannel-Objekt ab, indem SiegetNotificationChannel()odergetNotificationChannels()aufrufen.Sie können bestimmte Kanaleinstellungen wie
getVibrationPattern(),getSound()undgetImportance()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 schnell auf diese Benachrichtigungseinstellungen zugreifen können, fügen Sie in der Benutzeroberfläche der Einstellungen Ihrer App ein Element hinzu, das diese Systemeinstellungen öffnet.
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:
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") }
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:
val notificationManager = ContextCompat.getSystemService<NotificationManager>(context, NotificationManager::class.java) notificationManager?.deleteNotificationChannel(channelId)
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 eine gute Idee, wenn Ihre App mehrere Nutzerkonten unterstützt, da Sie dann für jedes Konto eine Benachrichtigungskanalgruppe erstellen können. Mit Channelgruppen können Nutzer mehrere Benachrichtigungschannels mit identischen Namen unterscheiden und steuern.
Abbildung 2: Benachrichtigungskanaleinstellungen 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. Im folgenden Snippet wird gezeigt, wie eine Benachrichtigungskanalgruppe erstellt wird.
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 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.