Notification Channel — co to je, jaké jsou typy a jak fungují v Androidu

Autor: IT Sectr Publikováno: 2026-03-20 Doba čtení: 8 min

Notification Channel (kanál oznámení) — je mechanismus Androidu, zavedený ve verzi 8.0 (API 26), který seskupuje oznámení podle kategorií a dává uživateli kontrolu nad jejich chováním. Každý kanál definuje úroveň důležitosti, zvuk, vibraci a vizuální vzhled pro všechna oznámení odeslaná přes něj. Podle Android Developers je NotificationChannel povinný pro všechna oznámení na Android 8+ — bez něj se oznámení nezobrazují.

Hlavní body

  • Notification Channel — kategorie oznámení Android 8+, která spravuje chování skupiny oznámení
  • Povinnost — na Android 8+ každé oznámení musí mít kanál, jinak se nezobrazí
  • Importance Level — úroveň důležitosti kanálu (IMPORTANCE_HIGH, DEFAULT, LOW, MIN) určuje způsob zobrazení
  • Ovládání uživatelem — uživatel může každý kanál individuálně přizpůsobit v nastavení systému
  • Skupiny kanálů — NotificationChannelGroup vizuálně spojuje kanály v rozhraní nastavení

Co je Notification Channel?

Notification Channel — je logický kontejner pro oznámení stejného typu v Android 8+ (Oreo). Vývojář vytvoří kanál s jedinečným ID, nastaví jeho parametry a poté odesílá každé oznámení s uvedením tohoto kanálu. Všechna oznámení v jednom kanálu dědí jeho nastavení.

Před Androidem 8 bylo řízení oznámení binární: všechno nebo nic. Uživatel mohl pouze úplně vypnout oznámení aplikace. Kanály tento problém vyřešily: nyní lze vypnout reklamní oznámení, ale ponechat zprávy od přátel.

Po vytvoření kanálu může jeho důležitost (importance) uživatel kdykoli změnit přes Nastavení → Aplikace → Oznámení. Vývojář nemůže po vytvoření kanálu importance programově změnit — toto je bezpečnostní omezení Androidu.

Povinnost kanálů

Na Android 8+ musí být každé oznámení odesláno přes NotificationChannel. Pokud se aplikace pokusí zobrazit oznámení bez kanálu — systém ho tiše ignoruje. Výjimka — oznámení přes NotificationCompat s výchozím kanálem, který je automaticky vytvořen knihovnou.

Jak fungují kanály oznámení v Androidu?

Kanál oznámení je definován sadou parametrů, které se nastavují při jeho vytvoření pomocí třídy NotificationChannel. Hlavní parametr — úroveň důležitosti (importance level), který určuje, jak oznámení interaguje s uživatelem.

  • ID kanálu — jedinečný řetězec (např. „messages“), používá se při odesílání každého oznámení
  • Název kanálu — čitelný název, zobrazený uživateli v nastavení
  • Popis — vysvětlení účelu kanálu, zobrazené v nastavení pod názvem
  • Importance — úroveň od IMPORTANCE_NONE do IMPORTANCE_HIGH, určuje způsob zobrazení
  • Zvuk a vibrace — nastavují se samostatně pro každý kanál při vytvoření

Po vytvoření se kanál objeví v systémovém nastavení oznámení. Uživatel může změnit importance, vypnout zvuk, vibraci nebo kanál zcela zablokovat. Všechny změny nabývají účinnosti okamžitě pro všechna následující oznámení.

Parametry konfigurace kanálu

Při vytváření NotificationChannel lze nakonfigurovat: zvuk (vlastní nebo systémový), vibraci (vzor a trvání), světelný indikátor (barva LED), odznak (setShowBadge), viditelnost na uzamčené obrazovce (setLockscreenVisibility) a režim Nerušit (setBypassDnd). Tyto parametry jsou při vytvoření kanálu fixovány a později je může změnit pouze uživatel.

Importance Level: srovnávací tabulka

Úroveň důležitosti (importance) — hlavní parametr kanálu. Určuje, zda oznámení přehraje zvuk, objeví se na obrazovce nebo bude pouze umístěno do stínu. Důležitost nelze zaměňovat s prioritou — importance nastavuje kanál, zatímco priorita (setPriority) je na Android 8+ ignorována.

ÚroveňKonstantaChováníZvuk
HIGHIMPORTANCE_HIGH (4)Zobrazí heads-up banner, objeví se v paneluAno
DEFAULTIMPORTANCE_DEFAULT (3)Objeví se v panelu, bez heads-upAno
LOWIMPORTANCE_LOW (2)Objeví se v panelu bez zvukuNe
MINIMPORTANCE_MIN (1)Pouze ve stínu, bez zvuku a vibraceNe
NONEIMPORTANCE_NONE (0)Vůbec se nezobrazíNe

Pro většinu uživatelských scénářů použijte IMPORTANCE_DEFAULT (3) — oznámení se objeví v panelu se zvukem, ale bez vyskakovacího banneru. IMPORTANCE_HIGH použijte pouze pro kritické události: příchozí hovor, zpráva od partnera, připomínka s časovačem.

Vytvoření kanálu v kódu Androidu

Kanál se vytváří jednou — při spuštění aplikace nebo při prvním použití. Nejlepší praxí je vytvořit všechny kanály při spuštění aplikace, v metodě Application.onCreate. Opětovné vytvoření existujícího kanálu je bezpečné — Android ignoruje volání, pokud kanál již existuje.

kotlin
class App : Application() {

    override fun onCreate() {
        super.onCreate()
        createNotificationChannels()
    }

    private fun createNotificationChannels() {
        val messagesChannel = NotificationChannel(
            CHANNEL_MESSAGES,
            "Zprávy",
            NotificationManager.IMPORTANCE_HIGH
        ).apply {
            description = "Oznámení o nových zprávách"
            enableVibration = true
            setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
        }

        val promoChannel = NotificationChannel(
            CHANNEL_PROMO,
            "Akce a novinky",
            NotificationManager.IMPORTANCE_LOW
        ).apply {
            description = "Marketingová oznámení a speciální nabídky"
            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"
    }
}

Při odesílání oznámení uveďte ID kanálu pomocí setChannelId (pro NotificationCompat) nebo v konstruktoru Notification.Builder. Pokud kanál s uvedeným ID neexistuje — oznámení se nezobrazí, ale nevznikne žádná chyba.

Správa kanálů a úpravy

Android poskytuje několik API pro programovou správu kanálů: získání seznamu, odstranění a kontrola aktuálního nastavení. Odstranění kanálu způsobí, že systém odstraní všechna jeho oznámení z historie.

kotlin
val manager =
    getSystemService(NotificationManager::class.java)

// Získat seznam všech kanálů
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
    Log.d("Kanály", "${channel.id}: ${channel.importance}")
}

// Zjistit aktuální importance (uživatel ho mohl změnit)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
    // Uživatel vypnul kanál
    suggestEnablingChannel()
}

// Odstranit kanál
manager.deleteNotificationChannel(CHANNEL_PROMO)

Po vytvoření kanálu vývojář nemůže programově změnit jeho importance — toto je omezení Androidu na ochranu uživatele před zneužitím. Pokud je třeba změnit důležitost kanálu, vytvořte nový kanál s jiným ID a migrujte oznámení.

Migrace při změně importance

Pokud je třeba změnit důležitost existujícího kanálu, vytvořte nový kanál s jiným ID (např. „messages_v2“) a začněte na něj odesílat oznámení. Starý kanál lze odstranit pomocí deleteNotificationChannel — všechna jeho oznámení budou odstraněna z historie. Informujte uživatele o migraci prostřednictvím rozhraní aplikace, aby neztratil nastavení.

Skupiny kanálů (NotificationChannelGroup)

NotificationChannelGroup spojuje několik kanálů do jedné vizuální skupiny v rozhraní nastavení Androidu. Skupiny pomáhají uživateli orientovat se, když aplikace používá 5+ kanálů: například „Sociální“, „Systémové“, „Marketing“.

Skupina se vytváří pomocí createNotificationChannelGroup a předává se kanálu při jeho vytvoření metodou setGroup. Odstranění skupiny odstraní také všechny její kanály. Každý kanál může patřit pouze do jedné skupiny.

V praxi jsou skupiny kanálů doporučeny pro aplikace s více než 3 kanály. Zjednodušují navigaci v nastavení a snižují pravděpodobnost, že uživatel vypne všechna oznámení najednou, aniž by rozuměl seznamu kanálů.

Příklad vytvoření skupiny kanálů

Skupina se vytváří pomocí createNotificationChannelGroup s jedinečným ID a názvem. Poté je každý kanál připojen ke skupině metodou setGroup. V systémovém nastavení se skupina zobrazuje jako sekce s nadpisem, pod kterým jsou všechny kanály této skupiny. Pokud je skupina odstraněna, všechny její kanály jsou také automaticky odstraněny systémem bez možnosti obnovení.

Vzory návrhu kanálů

Správný návrh kanálů oznámení přímo ovlivňuje uživatelský zážitek a retenci. Základní vzor — tři úrovně důležitosti: kritický kanál (IMPORTANCE_HIGH) pro zprávy a hovory, standardní (IMPORTANCE_DEFAULT) pro obecná oznámení a tichý (IMPORTANCE_LOW) pro marketing a novinky. Taková gradace dává uživateli srozumitelnou volbu bez přetížení.

Druhý vzor — kanál podle funkčního modulu. Každý velký modul aplikace (chat, objednávky, kanál, marketing) dostává svůj kanál. Pokud je modulů více než 5, spojte je do NotificationChannelGroup. V systémovém nastavení se skupina zobrazuje jako sekce se skrytelnými prvky — to zjednodušuje navigaci.

Třetí vzor — kanál pro vývojáře. Vytvořte samostatný kanál s IMPORTANCE_MIN pro ladicí a servisní oznámení. Uživatelé je neuvidí v panelu, ale vývojář může analyzovat protokoly přes adb. V produkci lze tento kanál odstranit nebo skrýt z rozhraní pomocí Intent v nastavení.

Čtvrtý vzor — zpětná vazba o kanálech. Ukažte uživateli v rozhraní, které kanály jsou aktivní a jaká je jejich aktuální importance. Na Android 8+ lze získat stav kanálu pomocí getNotificationChannel a nabídnout uživateli změnu nastavení, pokud je kanál vypnutý. To je obzvláště důležité pro kritické funkce aplikace.

Často kladené otázky

Co se stane, když na Android 8+ nevytvořím kanál?

Oznámení se nezobrazí ani v panelu, ani ve stínu. Systém tiše ignoruje volání notify(). Výjimky: při použití NotificationCompat knihovna vytvoří výchozí kanál, ale jeho importance je vždy DEFAULT. Doporučuje se vždy vytvářet vlastní kanály.

Lze kanál po jeho vytvoření změnit?

Lze změnit název, popis a zvuk kanálu. Nelze změnit importance — toto rozhodnutí je systémem chráněno před vývojářem. Pokud je třeba zvýšit důležitost — vytvořte nový kanál s jiným ID a používejte jej pro nová oznámení. Uživatel může importance změnit kdykoli.

Jak zkontrolovat, zda uživatel vypnul kanál?

Použijte getNotificationChannel a zkontrolujte importance: pokud je hodnota IMPORTANCE_NONE, kanál je vypnutý. Můžete také otevřít systémová nastavení kanálu pomocí Intent: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS s parametry app_package a channel_id.

Kolik kanálů lze vytvořit v jedné aplikaci?

Neexistují žádná omezení — Android nestanovuje limit na počet kanálů. Doporučuje se však nevytvářet více než 5–10 kanálů, aby nedošlo k přetížení uživatele výběrem. Optimální minimum jsou 2–3 kanály: kritická oznámení, běžná a marketingová.

Fungují kanály na Android 7 a starších verzích?

Na Android 7.1 (API 25) a starších verzích kanály nejsou podporovány. Třída NotificationChannel je dostupná až od API 26. Pro zpětnou kompatibilitu použijte NotificationCompat a obalte vytvoření kanálu podmínkou if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O).

Shrnutí

  • Notification Channel — mechanismus seskupování oznámení Android 8+, povinný pro zobrazení
  • Importance — úroveň od NONE do HIGH, určuje zvuk, heads-up a viditelnost v panelu
  • Správa — uživatel může kdykoli změnit importance a zvuk kanálu
  • Vytvoření — kanál se vytváří pomocí NotificationManager.createNotificationChannel jednou
  • Neměnnost importance — vývojář nemůže po vytvoření kanálu zvýšit důležitost
  • Skupiny — NotificationChannelGroup spojuje kanály pro snadnou navigaci v nastavení
  • Kompatibilita — na Android 7- použijte NotificationCompat s kontrolou verze SDK

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také