Ab Android 8.0 (API-Ebene 26) müssen alle Benachrichtigungen einem Kanal zugeordnet 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 entscheiden, welche Benachrichtigungskanäle Ihrer App aufdringlich oder sichtbar sein sollen.
Im folgenden Video finden Sie 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 einen Kanal für jede Art von Benachrichtigung, die Sie senden müssen. Sie können auch Benachrichtigungskanäle erstellen, um die Entscheidungen der Nutzer widerzuspiegeln. So können beispielsweise separate Benachrichtigungskanäle für jede Konversationsgruppe eingerichtet werden, die vom Nutzer in einer Messaging-App erstellt wird.
Wenn Sie auf Android 8.0 (API-Ebene 26) oder höher ausgerichtet sind, 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-Ebene 26) oder höher genauso wie auf Geräten mit Android 7.1 (API-Ebene 25) oder niedriger.
Benachrichtigungskanal erstellen
So erstellen Sie einen Benachrichtigungskanal:
Erstellen Sie ein
NotificationChannel-Objekt mit einer eindeutigen Kanal-ID, einem für Nutzer sichtbaren Namen und einer Prioritätsstufe.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.
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 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)
}
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 an einen bestimmten Kanal gesendet werden, das visuelle und
akustische Verhalten, das durch die Prioritätsstufe aus der
NotificationManagerCompat definiert wird, z. B. IMPORTANCE_DEFAULT oder
IMPORTANCE_HIGH. Weitere Informationen zu
Prioritätsstufen 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. Beachten Sie, 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.
Prioritätsstufe festlegen
Die Kanalpriorität wirkt sich auf die Unterbrechungsstufe aller Benachrichtigungen aus, die in diesem Kanal gesendet werden. Geben Sie sie im NotificationChannel Konstruktor mit einer von
fünf Prioritätsstufen an, 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 auch
setPriority() für jede Benachrichtigung aufrufen und eine Prioritätskonstante aus
der Klasse NotificationCompat verwenden.
Die Konstanten für Priorität (NotificationManager.IMPORTANCE_*) und Priorität (NotificationCompat.PRIORITY_*) werden den für Nutzer sichtbaren Prioritätsoptionen zugeordnet, wie in der folgenden Tabelle dargestellt.
| Für Nutzer sichtbare Prioritätsstufe | Priorität (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 |
| Keine Kein akustisches Signal und wird nicht auf der Statusleiste oder in der Benachrichtigungsleiste angezeigt |
IMPORTANCE_NONE |
N/A |
Alle Benachrichtigungen werden unabhängig von der Priorität an nicht störenden Stellen auf der System Benutzeroberflä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 Prioritätsstufe nicht mehr ändern. Der Nutzer kann jedoch jederzeit seine Einstellungen für die Kanäle Ihrer App ändern.
Informationen zum Auswählen einer geeigneten Prioritätsstufe finden Sie im Designleitfaden für Benachrichtigungen unter Prioritäts stufen.
Einstellungen für Benachrichtigungskanäle lesen
Nutzer können die Einstellungen für Benachrichtigungskanäle ändern, einschließlich Verhaltensweisen wie Vibration und Benachrichtigungston. Wenn Sie die Einstellungen kennen möchten, die ein Nutzer auf Ihre Benachrichtigungskanäle anwendet, gehen Sie so vor:
Rufen Sie das
NotificationChannelObjekt mitgetNotificationChannel()odergetNotificationChannels()ab.Fragen Sie bestimmte Kanaleinstellungen ab, z. B.
getVibrationPattern(),getSound()undgetImportance().
Wenn Sie eine Kanaleinstellung erkennen, die Ihrer Meinung nach 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 beschrieben.
Einstellungen für Benachrichtigungskanäle öffnen
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 Kanalverhalten in den Systemeinstellungen ändern. Damit Ihre Nutzer schnell 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 ACTION_CHANNEL_NOTIFICATION_SETTINGS
Aktion verwendet.
Im folgenden Beispielcode wird gezeigt, 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, packageName)
putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
}
startActivity(intent)
Die Intent erfordert zwei Extras, die den Paketnamen Ihrer App (auch als Anwendungs-ID bezeichnet) und den zu bearbeitenden Kanal angeben.
Benachrichtigungskanal löschen
Sie können Benachrichtigungskanäle mit
deleteNotificationChannel() löschen.
Im folgenden Beispielcode wird gezeigt, wie Sie diesen Vorgang ausführen:
// The id of the channel.
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val id: String = "my_channel_01"
notificationManager.deleteNotificationChannel(id)
Benachrichtigungskanalgruppe erstellen
Wenn Sie die Darstellung Ihrer Kanäle in der Benutzeroberfläche der Einstellungen weiter organisieren möchten, können Sie Kanalgruppen erstellen. Das ist eine gute Idee, wenn Ihre App mehrere Nutzerkonten unterstützt, da Sie für jedes Konto eine Benachrichtigungskanalgruppe erstellen können. Mit 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 Unterstützung für private und Arbeitskonten bieten. In diesem Fall 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
Beitragsempfehlungen
Ein Geschäftskonto mit zwei Kanälen:
Neue Kommentare
Beitragsempfehlungen
Wenn Sie die Benachrichtigungskanäle in Gruppen für jedes Konto organisieren, können Nutzer sie unterscheiden.
Jede Benachrichtigungskanalgruppe erfordert eine ID, die innerhalb Ihres Pakets eindeutig sein muss, sowie einen für Nutzer sichtbaren Namen. Im folgenden Codebeispiel wird gezeigt, wie Sie eine Benachrichtigungskanalgruppe erstellen.
// 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
<b>notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))</b>
Nachdem Sie eine neue Gruppe erstellt haben, können Sie
setGroup()
aufrufen, um ein neues NotificationChannel Objekt der Gruppe zuzuordnen.
Nachdem Sie den Kanal an den Benachrichtigungsmanager gesendet haben, können Sie die Zuordnung zwischen Benachrichtigungskanal und Gruppe nicht mehr ändern.