Intent Filter: mi ez, hogyan működik és használják a fejlesztésben

Szerző: IT Sectr Megjelenés: 2026-05-14 Olvasási idő: 8 perc

Az Intent Filter egy deklaratív bejelentés az AndroidManifest.xml fájlban, amely jelzi a rendszernek, hogy az alkalmazás mely komponense milyen implicit szándékokat képes kezelni. A Android Developer Guide szerint a filter action, category és data elemeket tartalmaz, amelyek alapján a rendszer útolja a hívásokat más alkalmazásokból és rendszereseményekből. Android-fejlesztés az Intent Filter-t használja a különböző alkalmazások komponensei közötti laza csatolás fő mechanizmusaként.

Főbb pontok

  • Intent Filter — XML deklaráció a manifestben, amely meghatározza azon implicit Intent típusokat, amelyeket egy Activity, Service vagy BroadcastReceiver kezelni képes.
  • Action megadja a komponens által végrehajtandó műveletet — például ACTION_VIEW az adatok megtekintéséhez vagy ACTION_SEND a tartalom elküldéséhez.
  • Category a komponens további kategóriáját állítja be — a BROWSABLE engedélyezi a böngészőből való hívást, a DEFAULT kötelező az implicit Intent-hez.
  • Data leírja a feldolgozott adatok URI-ját, MIME-típusát vagy sémáját, ami kritikus fontosságú a deep link alkalmazásban való konfigurálásához.
  • Konfliktusok több, ugyanazt az Intent-et kezelő alkalmazás esetén a rendszer választási párbeszédablaka vagy alapértelmezett beállítások oldják meg.

Mi az Intent Filter?

Intent Filter az Android-alkalmazás egy konfigurációs eleme, amely téjékoztatja a rendszert a komponens azon képességéről, hogy bizonyos típusú implicit szándékokat kezeljen. Az explicit Intent-től eltérően, amely egy adott osztályra mutat, az implicit Intent csak a kért művelet leírását tartalmazza, és a rendszer maga találja meg a megfelelő komponenst a regisztrált szűrők alapján.

A szűrők a komponensen belül kerülnek deklarálásra — Activity, Service vagy BroadcastReceiver — az AndroidManifest.xml fájlban. Minden szűrő több action, category és data elemet tartalmazhat. Egy komponens korlátlan számú Intent Filter-rel rendelkezhet, amelyek mindegyike különálló feldolgozási forgatókönyvet ír le.

Szerepe az Android architektúrában

Az Intent Filter az alkalmazás-komponensek közötti laza csatolás elvét valósítja meg. Az A alkalmazásnak nem kell tudnia a B alkalmazás létezéséről — egyszerűen elküld egy Intent-et a művelet leírásával, és a rendszer a szűrők alapján útolja azt. Ez a mechanizmus képezi a Share Sheet, a böngészőválasztás és a deep link kezelésének alapját.

Intent típusai: explicit és implicit

Az explicit Intent-ek az elindítandó komponens konkrét osztályára mutatnak. Ezeket az egy alkalmazáson belülli belső navigációhoz használják, amikor a fejlesztő pontosan tudja, melyik Activity-nek kell megnyílnia. Az implicit Intent-ek csak a művelet leírását tartalmazzák, és a komponenst a rendszer dinamikusan határozza meg.

Intent Filter kizárólag implicit Intent-ekkel működik. Ha az Intent-ben konkrét osztály van megadva, a rendszer figyelmen kívül hagyja az összes szűrőt, és közvetlenül elindítja a megadott komponenst. A szűrők csak implicit hívások feloldásakor kerülnek ellenőrzésre, ami az alkalmazások közötti interakció kulcselemévé teszi őket.

Explicit és implicit Intent-ek összehasonlítása

JellemzőExplicit IntentImplicit Intent
KomponensExplicit megadva (className)A rendszer határozza meg
Intent FilterNem szükségesKötelező
PéldastartActivity(Intent(this, ProfileActivity::class.java))Intent(ACTION_VIEW, Uri.parse("https://example.com"))
BiztonságMagasabb (nincs elfogás)Alacsonyabb (lehetséges konfliktusok)

Az Intent Filter felépítése a manifestben

Minden Intent Filter három elemcsoportból áll — action, category és data — amelyek kombinációja határozza meg, hogy a komponens milyen Intent-eket fogad. A szűrő akkor tekinthető átfutottnak, ha az Intent minden csoport legalább egy elemének megfelel.

Az Action leírja a végrehajtott műveletet — megtekintés, szerkesztés, küldés. A Category további feldolgozási kontextust ad — például a böngészőből történő indítás lehetőségét. A Data URI-n vagy MIME-típuson keresztül határozza meg a feldolgozott információ formátumát.

Az intent-filter címke komponensei

Példa Intent Filter-re egy olyan Activity számára, amely felhasználói profilokra mutató linkeket nyit meg. A szűrő mindhárom elemcsoportot tartalmazza a pontos útválasztás érdekében.

xml
<activity android:name=".ProfileActivity">
    <intent-filter>
        <action
            android:name="android.intent.action.VIEW" />
        <category
            android:name="android.intent.category.DEFAULT" />
        <category
            android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="myapp"
            android:host="profile" />
    </intent-filter>
</activity>

Figyeljen a category DEFAULT kötelező megadására — enélkül a rendszer nem továbbítja az implicit Intent-eket a komponensnek. A BROWSABLE kategória akkor kerül hozzáadásra, ha a linket a böngészőből kell feldolgozni.

A deep link Androidon ACTION VIEW-val és a sémát, gazdagépet és útvonalat tartalmazó data címkével ellátott Intent Filter segítségével konfigurálható. Amikor egy myapp://profile/42 alakú linkre kattint, a rendszer megtalálja a megfelelő szűrővel rendelkező Activity-t, és elindítja azt a továbbított URI-val. Fontos a pathPrefix, pathPattern vagy path helyes beállítása a pontos egyezéshez.

Az Android 6-tól (API 23) kezdve megjelent az App Links támogatása — HTTPS-en keresztül hitelesített deep link-ek. Az App Linkekhez ugyanazt az Intent Filter-t használjuk, de a Digital Asset Links-en keresztül történő további domén-hitelesítéssel. A hitelesítés után a rendszer automatikusan megnyitja az alkalmazást választási párbeszédablak nélkül.

Data címke URL-hez

Példa szűrőre App Link számára HTTPS-linken keresztül történő hitelesítéssel. Ebben az esetben a séma mindig https, és a gazdagép megegyezik a Digital Asset Links-ben megadott doménnel.

xml
<intent-filter android:autoVerify="true">
    <action
        android:name="android.intent.action.VIEW" />
    <category
        android:name="android.intent.category.DEFAULT" />
    <category
        android:name="android.intent.category.BROWSABLE" />
    <data
        android:scheme="https"
        android:host="example.com"
        android:pathPrefix="/profile" />
</intent-filter>

Az autoVerify attribútom utasítja a rendszert, hogy ellenőrizze a Digital Asset Links-et az alkalmazás telepítésekor. Ha a hitelesítés sikeres, az alkalmazás automatikusan az alapértelmezett kezelővé válik a megadott doménhez és útvonalakhoz.

Intent kezelése az alkalmazás komponenseiben

Miután a rendszer kiválasztotta a komponenst az Intent feldolgozására, a fejlesztőnek ki kell bontania az adatokat a célkomponensen belül a beérkező szándékból. Activity esetén a getIntent() metódus használatos az onCreate()-ben, BroadcastReceiver esetén az onReceive() metódus, ahol az Intent paraméterként kerül átadásra.

Az adatok kinyerése magában foglalja az action lekérését a művelet típusának meghatározásához, a data lekérését az URI-hoz és az extra paraméterek lekérését a kiegészítő információkhoz. Ezen elemek bármelyike hiányozhat, ezért a null-ellenőrzés a használat előtt kötelező.

Feldolgozási kód Activity-ben

Példa beérkező deep link feldolgozására egy Activity-ben Kotlin nyelven. A kód kinyeri az URI-t az Intent-ből, és a gazdagép és útvonal alapján navigációs döntést hoz.

kotlin
class ProfileActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val uri = intent?.data
        if (uri?.host == "profile") {
            val userId = uri.lastPathSegment
            loadProfile(userId)
        }
    }
}

Javasolt a safe call operator használata az intent és data null értékének ellenőrzéséhez, mivel az aktivitás beérkező deep link nélkül is elindítható. Szintén ellenőrizni kell a host és pathSegment null értékét a navigációban való használat előtt.

Prioritás és konfliktusok feloldása

Ha több alkalmazás regisztrált olyan Intent Filter-t, amely megfelel ugyanannak az implicit Intent-nek, a rendszer választási párbeszédablakot jelenít meg a felhasználó számára. A felhasználó kiválaszthatja az alkalmazást egyszeri használatra vagy beállíthat egy alapértelmezett kezelőt. Az Android 10-től kezdve a választási párbeszédablak csak az első hívásnál jelenik meg, ezt követően a rendszer megjegyzi a felhasználó választását.

A prioritás kezeléséhez az android:priority attribútom használható az intent-filter címkében. Minél magasabb az érték, annál nagyobb a komponens prioritása a konfliktusok feloldásakor. Azonban a prioritás nem működik a különböző alkalmazások szűrői esetében — ebben az esetben mindig megjelenik a választási párbeszédablak, ha egyetlen alkalmazás sincs alapértelmezettként beállítva.

Alkalmazásválasztási párbeszédablak

A fejlesztő programozottan meghívhatja a választási párbeszédablakot a Intent.createChooser() segítségével, átadva a cél Intent-et és egy címet. Ez akkor hasznos, ha az alkalmazás kifejezetten fel akarja ajánlani a felhasználónak egy kezelő kiválasztását, még akkor is, ha alapértelmezett alkalmazás van beállítva. Például képek közösségi médiába történő küldésekor ACTION_SEND és createChooser segítségével garantálható a párbeszédablak megjelenítése az alapértelmezett beállításoktól függetlenül.

Gyakori hibák az Intent Filter konfigurálásakor

Az egyik leggyakoribb hiba a DEFAULT kategória hiánya az Intent Filter-ből. A fejlesztők példákból másolják a konfigurációt, de elfelejtik hozzáadni ezt a kategóriát, így az Activity nem kap implicit Intent-eket. A rendszer egyszerűen nem látja a szűrőt az implicit hívásokhoz, bár az explicit Intent-ek továbbra is működnek.

A második gyakori hiba a scheme helytelen megadása a data címkében teljes URI nélkül. Ha csak a séma van megadva, de a gazdagép nem, a szűrő minden, ezzel a sémával rendelkező linket elfogad bármilyen forrásból, ami nemkívánt hívásokhoz vezethet nem hitelesített forrásokból. Javasolt mindig legalább a scheme és a host megadása.

A harmadik hiba az intent.data null-ellenőrzésének hiánya az Activity kódjában. Ha az Activity nem deep link-en keresztül, hanem szabványosan az indítóképernyőről indul, az Intent nem tartalmaz URI-t. Az intent.data ellenőrzés nélkül történő elérése NullPointerException-t és az alkalmazás összeomlását okozza. Mindig használja az intent?.data?.toString() metódust a safe call operátorral.

Gyakran Ismételt Kérdések

Kötelező megadni a category DEFAULT-ot az Intent Filter-ben?

Igen, az implicit Intent-ek fogadásához a DEFAULT kategória kötelező. Enélkül a rendszer nem továbbítja az implicit hívásokat a komponensnek, és az Intent Filter csak az explicit Intent-ekhez működik, amelyek egyébként sem ellenőrzik a szűrőket.

Hány Intent Filter-je lehet egy Activity-nek?

Nincs korlátozás. Egy Activity tetszőleges számú Intent Filter-t tartalmazhat. Minden szűrő különálló feldolgozási forgatókönyvet ír le, például az egyik szűrő a deep link-hez, a másik a fájlok feldolgozásához, a harmadik a Share Sheet-hez.

Miben különbözik az Intent Filter az App Link-től?

Az Intent Filter általános mechanizmus az implicit Intent-ek kezelésére. Az App Link az Intent Filter speciális esete Digital Asset Links-en keresztül történő hitelesítéssel, amely automatikusan kijelöli az alkalmazást alapértelmezett kezelőként a megadott doménen lévő HTTPS-linkek számára.

Használható az Intent Filter Service vagy BroadcastReceiver számára?

Igen, az Intent Filter nem csak Activity, hanem Service és BroadcastReceiver számára is deklarálható. Service esetén ez lehetővé teszi a háttérszolgáltatás elindítását más alkalmazásokból, BroadcastReceiver esetén pedig rendszerüzenetek fogadását.

Hogyan kezeli az Intent Filter a MIME-típusokat?

A MIME-típus a data címkében a mimeType attribútomokon keresztül kerül meghatározásra. A szűrő meghatározza, hogy a komponens milyen adattípusokat képes kezelni — például image/* az összes képhez vagy text/plain csak egyszerű szöveghez. A MIME-típusok kombinálhatók URI-sémákkal.

Összefoglaló

  • Intent Filter — XML deklaráció az AndroidManifest.xml fájlban, amely meghatározza, hogy az alkalmazás komponense milyen implicit Intent-eket képes kezelni.
  • Három csoport — action (művelet), category (kategória), data (URI és MIME) alkotja a szűrőt; a komponens akkor kapja meg az Intent-et, ha az összes megadott csoport egyezik.
  • Deep link ACTION VIEW és a sémát, gazdagépet és útvonalat tartalmazó data címkével konfigurálható, opcionális autoVerify-val az App Linkekhez.
  • App Links — Digital Asset Links-en keresztül hitelesített HTTPS-linkek, amelyek nem igényelnek alkalmazásválasztási párbeszédablakot.
  • Konfliktusok több szűrő egyezése esetén rendszer párbeszédablakkal vagy prioritással oldhatók fel ugyanazon alkalmazás komponensei számára.
  • Feldolgozás a beérkező Intent feldolgozása intent.data-n keresztül Activity-ben vagy onReceive-on keresztül BroadcastReceiver-ben történik, kötelező null-ellenőrzéssel.
  • Alkalmazás — az Intent Filter alkalmazások közötti interakcióra, linkek, fájlok és rendszeresemények kezelésére használatos.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is