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:
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:
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:
Rufen Sie das Objekt
NotificationChannel
mitgetNotificationChannel()
odergetNotificationChannels()
ab.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 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.