Notification Channel (Benachrichtigungskanal) ist ein Android-Mechanismus, der in Version 8.0 (API 26) eingeführt wurde, Benachrichtigungen nach Kategorien gruppiert und dem Benutzer Kontrolle über ihr Verhalten gibt. Jeder Kanal definiert die Wichtigkeitsstufe, den Ton, die Vibration und das visuelle Erscheinungsbild für alle über ihn gesendeten Benachrichtigungen. Laut Android Developers ist NotificationChannel für alle Benachrichtigungen auf Android 8+ erforderlich — ohne ihn werden Benachrichtigungen nicht angezeigt.
Wichtige Punkte
Notification Channel ist ein logischer Container für Benachrichtigungen desselben Typs in Android 8+ (Oreo). Der Entwickler erstellt einen Kanal mit einer eindeutigen ID, legt seine Parameter fest und sendet dann jede Benachrichtigung unter Angabe dieses Kanals. Alle Benachrichtigungen in einem Kanal übernehmen seine Einstellungen.
Vor Android 8 war die Benachrichtigungsverwaltung binär: alles oder nichts. Der Benutzer konnte nur alle App-Benachrichtigungen vollständig deaktivieren. Kanäle haben dieses Problem gelöst: Jetzt können Sie „Werbung“-Benachrichtigungen deaktivieren, aber „Nachrichten von Freunden“ behalten.
Nach der Erstellung eines Kanals kann die Wichtigkeit vom Benutzer jederzeit über Einstellungen → Apps → Benachrichtigungen geändert werden. Der Entwickler kann die Wichtigkeit nach der Erstellung des Kanals nicht programmatisch ändern — dies ist eine Android-Sicherheitseinschränkung.
Unter Android 8+ muss jede Benachrichtigung über einen NotificationChannel gesendet werden. Wenn eine App versucht, eine Benachrichtigung ohne Kanal anzuzeigen, ignoriert das System sie stillschweigend. Die Ausnahme sind Benachrichtigungen über NotificationCompat mit einem Standardkanal, der automatisch von der Bibliothek erstellt wird.
Ein Benachrichtigungskanal wird durch eine Reihe von Parametern definiert, die bei seiner Erstellung über die Klasse NotificationChannel festgelegt werden. Der Hauptparameter ist die Wichtigkeitsstufe, die bestimmt, wie die Benachrichtigung mit dem Benutzer interagiert.
Nach der Erstellung erscheint der Kanal in den System-Benachrichtigungseinstellungen. Der Benutzer kann die Wichtigkeit ändern, den Ton deaktivieren, die Vibration deaktivieren oder den Kanal vollständig blockieren. Alle Änderungen werden sofort für alle nachfolgenden Benachrichtigungen wirksam.
Beim Erstellen eines NotificationChannel können Sie konfigurieren: Ton (benutzerdefiniert oder System), Vibration (Muster und Dauer), Lichtanzeige (LED-Farbe), Badge-Symbol (setShowBadge), Bildschirmsperre (setLockscreenVisibility) und Nicht-stören-Modus (setBypassDnd). Diese Parameter werden bei der Kanalerstellung festgelegt und können später nur vom Benutzer geändert werden.
Die Wichtigkeitsstufe ist der Hauptparameter eines Kanals. Sie bestimmt, ob die Benachrichtigung einen Ton abspielt, auf dem Bildschirm erscheint oder einfach im Schatten platziert wird. Wichtigkeit darf nicht mit Priorität verwechselt werden — die Wichtigkeit wird vom Kanal festgelegt, und die Priorität (setPriority) wird auf Android 8+ ignoriert.
| Stufe | Konstante | Verhalten | Ton |
|---|---|---|---|
| HIGH | IMPORTANCE_HIGH (4) | Zeigt Heads-up-Banner, erscheint im Schatten | Ja |
| DEFAULT | IMPORTANCE_DEFAULT (3) | Erscheint im Schatten, ohne Heads-up | Ja |
| LOW | IMPORTANCE_LOW (2) | Erscheint im Schatten ohne Ton | Nein |
| MIN | IMPORTANCE_MIN (1) | Nur im Schatten, ohne Ton oder Vibration | Nein |
| NONE | IMPORTANCE_NONE (0) | Wird gar nicht angezeigt | Nein |
Für die meisten Benutzerszenarien verwenden Sie IMPORTANCE_DEFAULT (3) — die Benachrichtigung erscheint im Schatten mit Ton, aber ohne Pop-up-Banner. Verwenden Sie IMPORTANCE_HIGH nur für kritische Ereignisse: eingehender Anruf, Nachricht von einem Kontakt, Timer-Erinnerung.
Der Kanal wird einmalig beim App-Start oder bei der ersten Verwendung erstellt. Die beste Praxis ist, alle Kanäle beim App-Start in der Methode Application.onCreate zu erstellen. Das erneute Erstellen eines vorhandenen Kanals ist sicher — Android ignoriert den Aufruf, wenn der Kanal bereits existiert.
class App : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannels()
}
private fun createNotificationChannels() {
val messagesChannel = NotificationChannel(
CHANNEL_MESSAGES,
"Nachrichten",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Benachrichtigungen über neue Nachrichten"
enableVibration = true
setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
}
val promoChannel = NotificationChannel(
CHANNEL_PROMO,
"Aktionen und Neuigkeiten",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "Marketing-Benachrichtigungen und Sonderangebote"
setShowBadge(false)
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(messagesChannel)
manager.createNotificationChannel(promoChannel)
}
companion object {
const val CHANNEL_MESSAGES = "messages"
const val CHANNEL_PROMO = "promo"
}
}
Beim Senden einer Benachrichtigung geben Sie die Kanal-ID über setChannelId (für NotificationCompat) oder im Notification.Builder-Konstruktor an. Wenn der Kanal mit der angegebenen ID nicht existiert, wird die Benachrichtigung nicht angezeigt, es tritt jedoch kein Fehler auf.
Android bietet mehrere APIs für die programmatische Kanalverwaltung: Liste abrufen, löschen und aktuelle Einstellungen überprüfen. Das Löschen eines Kanals führt dazu, dass alle seine Benachrichtigungen aus dem Systemverlauf entfernt werden.
val manager =
getSystemService(NotificationManager::class.java)
// Liste aller Kanäle abrufen
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
Log.d("Kanäle", "${channel.id}: ${channel.importance}")
}
// Aktuelle Wichtigkeit erfahren (Benutzer könnte sie geändert haben)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
// Benutzer hat den Kanal deaktiviert
suggestEnablingChannel()
}
// Kanal löschen
manager.deleteNotificationChannel(CHANNEL_PROMO)
Nach der Erstellung eines Kanals kann der Entwickler seine Wichtigkeit nicht programmatisch ändern — dies ist eine Android-Einschränkung zum Schutz des Benutzers vor Missbrauch. Wenn Sie die Wichtigkeit eines Kanals ändern müssen, erstellen Sie einen neuen Kanal mit einer anderen ID und migrieren Sie die Benachrichtigungen.
Wenn Sie die Wichtigkeit eines vorhandenen Kanals ändern müssen, erstellen Sie einen neuen Kanal mit einer anderen ID (z.B. „messages_v2“) und beginnen Sie, Benachrichtigungen an ihn zu senden. Der alte Kanal kann über deleteNotificationChannel gelöscht werden — alle seine Benachrichtigungen werden aus dem Verlauf entfernt. Warnen Sie den Benutzer über die Migration über die App-Oberfläche, damit er seine Einstellungen nicht verliert.
NotificationChannelGroup fasst mehrere Kanäle in einer visuellen Gruppe in der Android-Einstellungsoberfläche zusammen. Gruppen helfen dem Benutzer bei der Navigation, wenn die App 5+ Kanäle verwendet: z.B. „Soziales,“ „System,“ „Marketing.“
Eine Gruppe wird über createNotificationChannelGroup erstellt und dem Kanal bei seiner Erstellung über die setGroup-Methode übergeben. Das Löschen einer Gruppe löscht auch alle ihre Kanäle. Jeder Kanal kann nur zu einer Gruppe gehören.
In der Praxis werden Kanalgruppen für Apps mit mehr als 3 Kanälen empfohlen. Sie vereinfachen die Navigation in den Einstellungen und verringern die Wahrscheinlichkeit, dass der Benutzer alle Benachrichtigungen auf einmal deaktiviert, ohne die Kanalliste zu verstehen.
Eine Gruppe wird über createNotificationChannelGroup mit einer eindeutigen ID und einem Namen erstellt. Anschließend wird jeder Kanal über die setGroup-Methode der Gruppe zugewiesen. In den Systemeinstellungen erscheint die Gruppe als Abschnitt mit einer Überschrift, unter der alle Kanäle dieser Gruppe aufgeführt sind. Wenn eine Gruppe gelöscht wird, werden auch alle ihre Kanäle automatisch vom System ohne Wiederherstellungsmöglichkeit entfernt.
Das richtige Design von Benachrichtigungskanälen wirkt sich direkt auf die Benutzererfahrung und -bindung aus. Das Hauptmuster sind drei Wichtigkeitsstufen: kritischer Kanal (IMPORTANCE_HIGH) für Nachrichten und Anrufe, Standard (IMPORTANCE_DEFAULT) für allgemeine Benachrichtigungen und leise (IMPORTANCE_LOW) für Marketing und Nachrichten. Diese Abstufung gibt dem Benutzer eine klare Auswahl ohne Überlastung.
Das zweite Muster ist ein Kanal pro Funktionsmodul. Jedes Hauptmodul der App (Chat, Bestellungen, Feed, Marketing) erhält seinen eigenen Kanal. Wenn es mehr als 5 Module gibt, fassen Sie sie in einer NotificationChannelGroup zusammen. In den Systemeinstellungen erscheint die Gruppe als Abschnitt mit einklappbaren Elementen — dies vereinfacht die Navigation.
Das dritte Muster ist ein Entwicklerkanal. Erstellen Sie einen separaten Kanal mit IMPORTANCE_MIN für Debug- und Service-Benachrichtigungen. Benutzer sehen sie nicht im Schatten, aber der Entwickler kann Logs über adb analysieren. In der Produktion kann dieser Kanal gelöscht oder über Intent in den Einstellungen aus der Oberfläche ausgeblendet werden.
Das vierte Muster ist das Kanal-Feedback. Zeigen Sie dem Benutzer in der Oberfläche, welche Kanäle aktiv sind und welche aktuelle Wichtigkeit sie haben. Auf Android 8+ können Sie den Kanalstatus über getNotificationChannel abrufen und dem Benutzer anbieten, die Einstellungen zu ändern, wenn der Kanal deaktiviert ist. Dies ist besonders wichtig für kritische App-Funktionen.
Häufig gestellte Fragen
Die Benachrichtigung wird nicht angezeigt, weder im Schatten noch im Benachrichtigungsfeld. Das System ignoriert den notify()-Aufruf stillschweigend. Ausnahmen: Bei Verwendung von NotificationCompat erstellt die Bibliothek einen Standardkanal, aber seine Wichtigkeit ist immer DEFAULT. Es wird empfohlen, immer eigene Kanäle zu erstellen.
Sie können den Namen, die Beschreibung und den Ton eines Kanals ändern. Sie können die Wichtigkeit nicht ändern — diese Entscheidung wird vom System vor dem Entwickler geschützt. Wenn Sie die Wichtigkeit erhöhen müssen, erstellen Sie einen neuen Kanal mit einer anderen ID und verwenden Sie ihn für neue Benachrichtigungen. Der Benutzer kann die Wichtigkeit jederzeit ändern.
Verwenden Sie getNotificationChannel und überprüfen Sie die Wichtigkeit: Wenn der Wert IMPORTANCE_NONE ist, ist der Kanal deaktiviert. Sie können auch die Systemeinstellungen des Kanals über Intent öffnen: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS mit den Parametern app_package und channel_id.
Es gibt keine Grenzen — Android legt keine Beschränkung für die Anzahl der Kanäle fest. Es wird jedoch empfohlen, nicht mehr als 5–10 Kanäle zu erstellen, um den Benutzer nicht mit Auswahlmöglichkeiten zu überfordern. Das optimale Minimum sind 2–3 Kanäle: kritische Benachrichtigungen, reguläre und Marketing.
Auf Android 7.1 (API 25) und darunter werden Kanäle nicht unterstützt. Die Klasse NotificationChannel ist erst ab API 26 verfügbar. Verwenden Sie für Abwärtskompatibilität NotificationCompat und umschließen Sie die Kanalerstellung mit einer Bedingung: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O).
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch