Notification Channel (meldingskanaal) — is een Android-mechanisme, geïntroduceerd in versie 8.0 (API 26), dat meldingen categoriseert en de gebruiker controle geeft over hun gedrag. Elk kanaal bepaalt het belangrijkheidsniveau, geluid, trilling en visuele vormgeving voor alle meldingen die erdoor worden verzonden. Volgens Android Developers is NotificationChannel verplicht voor alle meldingen op Android 8+ — zonder worden meldingen niet weergegeven.
Belangrijkste punten
Notification Channel — is een logische container voor meldingen van hetzelfde type in Android 8+ (Oreo). De ontwikkelaar maakt een kanaal met een uniek ID, stelt de parameters in en verzendt vervolgens elke melding met vermelding van dit kanaal. Alle meldingen in één kanaal erven de instellingen ervan.
Vóór Android 8 was meldingenbeheer binair: alles of niets. De gebruiker kon alleen meldingen van de app volledig uitschakelen. Kanalen hebben dit probleem opgelost: nu kunnen reclame-meldingen worden uitgeschakeld terwijl berichten van vrienden behouden blijven.
Na het aanmaken van het kanaal kan de belangrijkheid (importance) ervan door de gebruiker op elk moment worden gewijzigd via Instellingen → Apps → Meldingen. De ontwikkelaar kan importance niet programmatisch wijzigen nadat het kanaal is aangemaakt — dit is een Android-beveiligingsbeperking.
Op Android 8+ moet elke melding via NotificationChannel worden verzonden. Als de app probeert een melding zonder kanaal weer te geven — negeert het systeem deze stilzwijgend. Uitzondering — meldingen via NotificationCompat met een standaardkanaal dat automatisch door de bibliotheek wordt aangemaakt.
Een meldingskanaal wordt gedefinieerd door een set parameters die worden ingesteld bij het aanmaken via de klasse NotificationChannel. De belangrijkste parameter — importance level, die bepaalt hoe de melding met de gebruiker interageert.
Na het aanmaken verschijnt het kanaal in de systeeminstellingen voor meldingen. De gebruiker kan importance wijzigen, geluid, trilling uitschakelen of het kanaal volledig blokkeren. Alle wijzigingen worden onmiddellijk van kracht voor alle volgende meldingen.
Bij het aanmaken van NotificationChannel kunnen worden geconfigureerd: geluid (aangepast of systeem), trilling (patroon en duur), lichtindicator (LED-kleur), badge (setShowBadge), zichtbaarheid op vergrendeld scherm (setLockscreenVisibility) en Niet storen-modus (setBypassDnd). Deze parameters worden vastgelegd bij het aanmaken van het kanaal en kunnen later alleen door de gebruiker worden gewijzigd.
Het belangrijkheidsniveau (importance) — de hoofdparameter van het kanaal. Het bepaalt of de melding geluid afspeelt, op het scherm verschijnt of alleen in de schaduw wordt geplaatst. Belangrijkheid mag niet worden verward met prioriteit — importance wordt door het kanaal ingesteld, terwijl prioriteit (setPriority) op Android 8+ wordt genegeerd.
| Niveau | Constante | Gedrag | Geluid |
|---|---|---|---|
| HIGH | IMPORTANCE_HIGH (4) | Toont heads-up banner, verschijnt in het meldingenpaneel | Ja |
| DEFAULT | IMPORTANCE_DEFAULT (3) | Verschijnt in het meldingenpaneel, zonder heads-up | Ja |
| LOW | IMPORTANCE_LOW (2) | Verschijnt in het meldingenpaneel zonder geluid | Nee |
| MIN | IMPORTANCE_MIN (1) | Alleen in de schaduw, zonder geluid en trilling | Nee |
| NONE | IMPORTANCE_NONE (0) | Wordt helemaal niet weergegeven | Nee |
Gebruik voor de meeste gebruikersscenario’s IMPORTANCE_DEFAULT (3) — de melding verschijnt in het paneel met geluid, maar zonder pop-upbanner. Gebruik IMPORTANCE_HIGH alleen voor kritieke gebeurtenissen: inkomend gesprek, bericht van een gesprekspartner, herinnering met timer.
Het kanaal wordt eenmalig aangemaakt — bij het opstarten van de app of bij het eerste gebruik. De beste praktijk is om alle kanalen aan te maken bij het opstarten van de app, in de methode Application.onCreate. Het opnieuw aanmaken van een bestaand kanaal is veilig — Android negeert de aanroep als het kanaal al bestaat.
class App : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannels()
}
private fun createNotificationChannels() {
val messagesChannel = NotificationChannel(
CHANNEL_MESSAGES,
"Berichten",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Meldingen over nieuwe berichten"
enableVibration = true
setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
}
val promoChannel = NotificationChannel(
CHANNEL_PROMO,
"Acties en nieuws",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "Marketingmeldingen en speciale aanbiedingen"
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"
}
}
Geef bij het verzenden van een melding het kanaal-ID op via setChannelId (voor NotificationCompat) of in de constructor van Notification.Builder. Als het kanaal met het opgegeven ID niet bestaat — wordt de melding niet getoond, maar treedt er geen fout op.
Android biedt verschillende API’s voor programmatisch kanaalbeheer: lijst ophalen, verwijderen en huidige instellingen controleren. Het verwijderen van een kanaal leidt ertoe dat al zijn meldingen door het systeem uit de geschiedenis worden verwijderd.
val manager =
getSystemService(NotificationManager::class.java)
// Lijst van alle kanalen ophalen
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
Log.d("Kanalen", "${channel.id}: ${channel.importance}")
}
// Huidige importance achterhalen (gebruiker kan deze hebben gewijzigd)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
// Gebruiker heeft kanaal uitgeschakeld
suggestEnablingChannel()
}
// Kanaal verwijderen
manager.deleteNotificationChannel(CHANNEL_PROMO)
Nadat het kanaal is aangemaakt, kan de ontwikkelaar de importance niet programmatisch wijzigen — dit is een Android-beperking om de gebruiker te beschermen tegen misbruik. Als de belangrijkheid van het kanaal moet worden gewijzigd, maak dan een nieuw kanaal met een ander ID en migreer de meldingen.
Als de belangrijkheid van een bestaand kanaal moet worden gewijzigd, maak dan een nieuw kanaal met een ander ID (bijv. „messages_v2“) en begin meldingen ernaartoe te sturen. Het oude kanaal kan worden verwijderd via deleteNotificationChannel — al zijn meldingen worden uit de geschiedenis verwijderd. Informeer de gebruiker over de migratie via de app-interface zodat hij geen instellingen verliest.
NotificationChannelGroup combineert meerdere kanalen in één visuele groep in de Android-instellingeninterface. Groepen helpen de gebruiker bij de navigatie wanneer de app 5+ kanalen gebruikt: bijvoorbeeld „Sociaal“, „Systeem“, „Marketing“.
De groep wordt aangemaakt via createNotificationChannelGroup en doorgegeven aan het kanaal bij het aanmaken via de methode setGroup. Het verwijderen van de groep verwijdert ook al zijn kanalen. Elk kanaal kan slechts tot één groep behoren.
In de praktijk worden kanaalgroepen aanbevolen voor apps met meer dan 3 kanalen. Ze vereenvoudigen de navigatie in instellingen en verkleinen de kans dat de gebruiker alle meldingen in één keer uitschakelt zonder de lijst met kanalen te begrijpen.
De groep wordt aangemaakt via createNotificationChannelGroup met een uniek ID en naam. Vervolgens wordt elk kanaal via de methode setGroup aan de groep gekoppeld. In de systeeminstellingen wordt de groep weergegeven als een sectie met een kop, waaronder alle kanalen van deze groep vallen. Als de groep wordt verwijderd, worden al zijn kanalen ook automatisch door het systeem verwijderd zonder herstelmogelijkheid.
Het correct ontwerpen van meldingskanalen heeft directe invloed op de gebruikerservaring en retentie. Het belangrijkste patroon — drie belangrijkheidsniveaus: kritiek kanaal (IMPORTANCE_HIGH) voor berichten en oproepen, standaard (IMPORTANCE_DEFAULT) voor algemene meldingen en stil (IMPORTANCE_LOW) voor marketing en nieuws. Zo’n gradatie geeft de gebruiker een duidelijke keuze zonder overbelasting.
Het tweede patroon — kanaal per functionele module. Elke grote module van de app (chat, bestellingen, feed, marketing) krijgt zijn eigen kanaal. Als er meer dan 5 modules zijn, combineer ze dan in NotificationChannelGroup. In de systeeminstellingen wordt de groep weergegeven als een sectie met inklapbare elementen — dit vereenvoudigt de navigatie.
Het derde patroon — kanaal voor ontwikkelaars. Maak een apart kanaal met IMPORTANCE_MIN voor foutopsporings- en servicemeldingen. Gebruikers zien ze niet in het paneel, maar de ontwikkelaar kan logs analyseren via adb. In productie kan dit kanaal worden verwijderd of via Intent uit de interface worden verborgen in de instellingen.
Het vierde patroon — feedback over kanalen. Toon de gebruiker in de interface welke kanalen actief zijn en wat hun huidige importance is. Op Android 8+ kan de kanaalstatus worden opgevraagd via getNotificationChannel en kan de gebruiker worden voorgesteld de instellingen te wijzigen als het kanaal is uitgeschakeld. Dit is vooral belangrijk voor kritieke functies van de app.
Veelgestelde vragen
De melding wordt niet weergegeven in het paneel of in de schaduw. Het systeem negeert de notify()-aanroep stilzwijgend. Uitzonderingen: bij gebruik van NotificationCompat maakt de bibliotheek een standaardkanaal aan, maar de importance ervan is altijd DEFAULT. Het wordt aanbevolen altijd eigen kanalen aan te maken.
De naam, beschrijving en het geluid van het kanaal kunnen worden gewijzigd. Importance kan niet worden gewijzigd — deze beslissing wordt door het systeem beschermd tegen de ontwikkelaar. Als de belangrijkheid moet worden verhoogd — maak dan een nieuw kanaal met een ander ID en gebruik het voor nieuwe meldingen. De gebruiker kan importance op elk moment wijzigen.
Gebruik getNotificationChannel en controleer importance: als de waarde IMPORTANCE_NONE is, is het kanaal uitgeschakeld. Je kunt ook de systeeminstellingen van het kanaal openen via Intent: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS met parameters app_package en channel_id.
Er zijn geen beperkingen — Android stelt geen limiet aan het aantal kanalen. Het wordt echter aanbevolen niet meer dan 5–10 kanalen aan te maken om de gebruiker niet te overladen met keuzes. Het optimale minimum is 2–3 kanalen: kritieke meldingen, gewone meldingen en marketing.
Op Android 7.1 (API 25) en ouder worden kanalen niet ondersteund. De klasse NotificationChannel is alleen beschikbaar vanaf API 26. Gebruik voor achterwaartse compatibiliteit NotificationCompat en omhul het aanmaken van het kanaal met een if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)-conditie.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook