Intent Filter: ce este, cum funcționează și se utilizează în dezvoltare

Autor: IT Sectr Publicat: 2026-05-14 Timp de citire: 8 min

Intent Filter este o declarație declarativă în AndroidManifest.xml care indică sistemului ce intenții implicite poate procesa o componentă de aplicație. Conform Android Developer Guide, filtrul conține action, category și data, pe baza cărora sistemul rutează apelurile de la alte aplicații și evenimente de sistem. Dezvoltarea Android utilizează Intent Filter ca mecanism principal de cuplare slabă între componentele diferitelor aplicații.

Principalele puncte

  • Intent Filter — declarație XML în manifest care definește tipurile de Intent implicite pe care le poate procesa o Activity, Service sau BroadcastReceiver.
  • Action indică acțiunea pe care componenta trebuie să o execute — de exemplu, ACTION_VIEW pentru vizualizarea datelor sau ACTION_SEND pentru trimiterea de conținut.
  • Category stabilește o categorie suplimentară a componentei — BROWSABLE permite apelul din browser, DEFAULT este necesară pentru Intent implicite.
  • Data descrie URI, tipul MIME sau schema datelor procesate, ceea ce este esențial pentru configurarea deep link în aplicație.
  • Conflictele în prezența mai multor aplicații care procesează același Intent se rezolvă prin dialogul de selecție al sistemului sau setările implicite.

Ce este Intent Filter?

Intent Filter este un element de configurare al aplicației Android care informează sistemul despre capacitatea componentei de a procesa anumite tipuri de intenții implicite. Spre deosebire de Intent explicite care indică o clasă specifică, Intent implicite conțin doar descrierea acțiunii solicitate, iar sistemul găsește singur componenta potrivită pe baza filtrelor înregistrate.

Filtrele sunt declarate în interiorul componentei — Activity, Service sau BroadcastReceiver — în fișierul AndroidManifest.xml. Fiecare filtru poate conține mai multe elemente action, category și data. O componentă poate avea un număr nelimitat de Intent Filter, fiecare descriind un scenariu separat de procesare.

Rolul în arhitectura Android

Intent Filter implementează principiul cuplării slabe între componentele aplicațiilor. Aplicația A nu trebuie să știe de existența aplicației B — trimite pur și simplu un Intent cu descrierea acțiunii, iar sistemul îl rutează pe baza filtrelor. Acest mecanism stă la baza Share Sheet, selectării browserului și procesării deep link.

Tipuri de Intent: explicite și implicite

Intent explicite indică clasa specifică a componentei de lansat. Sunt utilizate pentru navigarea internă în cadrul aceleiași aplicații, când dezvoltatorul știe exact ce Activity trebuie deschisă. Intent implicite conțin doar descrierea acțiunii, iar componenta este determinată dinamic de sistem.

Intent Filter funcționează exclusiv cu Intent implicite. Dacă în Intent este specificată o clasă concretă, sistemul ignoră toate filtrele și lansează direct componenta indicată. Filtrele sunt verificate doar la rezolvarea apelurilor implicite, ceea ce le face un element cheie al interacțiunii dintre aplicații.

Comparație între Intent explicite și implicite

CaracteristicăIntent explicitIntent implicit
ComponentaSpecificată explicit (className)Determinată de sistem
Intent FilterNu este necesarObligatoriu
ExemplustartActivity(Intent(this, ProfileActivity::class.java))Intent(ACTION_VIEW, Uri.parse("https://example.com"))
SecuritateMai mare (fără interceptare)Mai mică (posibile conflicte)

Structura Intent Filter în manifest

Fiecare Intent Filter constă în trei grupuri de elemente — action, category și data — a căror combinație determină ce Intent va primi componenta. Filtrul este considerat îndeplinit dacă Intentul corespunde cel puțin unui element din fiecare grup.

Action descrie acțiunea executată — vizualizare, editare, trimitere. Category adaugă un context suplimentar de procesare — de exemplu, posibilitatea de lansare din browser. Data definește formatul informațiilor procesate prin URI sau tip MIME.

Componentele tagului intent-filter

Exemplu de Intent Filter pentru o Activity care deschide linkuri către profiluri de utilizatori. Filtrul include toate cele trei grupuri de elemente pentru rutare precisă.

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>

Observați specificarea obligatorie a category DEFAULT — fără ea, sistemul nu va transmite componentei Intent implicite. Categoria BROWSABLE se adaugă dacă linkul trebuie procesat din browser.

Deep link pe Android se configurează prin Intent Filter cu action VIEW și tagul data care conține schema, hostul și calea. La accesarea unui link de forma myapp://profile/42, sistemul găsește Activity cu filtrul potrivit și o lansează cu URI-ul transmis. Este important să configurați corect pathPrefix, pathPattern sau path pentru potrivire precisă.

începând cu Android 6 (API 23) a apărut suportul pentru App Links — deep link-uri verificate prin HTTPS. Pentru App Links se utilizează același Intent Filter, dar cu verificare suplimentară a domeniului prin Digital Asset Links. După verificare, sistemul deschide automat aplicația fără dialog de selecție.

Tagul data pentru URL

Exemplu de filtru pentru App Link cu verificare prin link HTTPS. În acest caz, schema este întotdeauna https, iar hostul corespunde domeniului specificat în Digital Asset Links.

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>

Atributul autoVerify instruiește sistemul să verifice Digital Asset Links la instalarea aplicației. Dacă verificarea reușește, aplicația devine automat gestionarul implicit pentru domeniul și căile specificate.

Procesarea Intent în componentele aplicației

După ce sistemul a selectat componenta pentru procesarea Intentului, dezvoltatorul trebuie să extragă datele din intenția primită în interiorul componentei șintă. Pentru Activity se utilizează metoda getIntent() în onCreate(), pentru BroadcastReceiver — metoda onReceive(), unde Intentul este transmis ca parametru.

Extragerea datelor include obținerea action pentru determinarea tipului de operație, data pentru URI și parametrii extra pentru informații suplimentare. Fiecare dintre aceste elemente poate lipsi, deci este obligatorie verificarea null înainte de utilizare.

Cod de procesare în Activity

Exemplu de procesare a unui deep link primit într-o Activity în Kotlin. Codul extrage URI-ul din Intent și pe baza hostului și a căii ia o decizie de navigare.

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)
        }
    }
}

Se recomandă utilizarea safe call operator pentru verificarea intent și data la null, deoarece activitatea poate fi lansată fără un deep link primit. De asemenea, trebuie verificate host și pathSegment pentru null înainte de utilizare în navigare.

Prioritate și rezolvarea conflictelor

Dacă mai multe aplicații au înregistrat un Intent Filter potrivit pentru același Intent implicit, sistemul afișează utilizatorului un dialog de selecție. Utilizatorul poate alege aplicația pentru utilizare o singură dată sau poate seta un gestionar implicit. începând cu Android 10, dialogul de selecție se afișează doar la prima apelare, după care sistemul reține alegerea utilizatorului.

Pentru gestionarea priorității se utilizează atributul android:priority în tagul intent-filter. Cu cât valoarea este mai mare, cu atât prioritatea componentei la rezolvarea conflictelor este mai mare. Totuși, prioritatea nu funcționează pentru filtre din aplicații diferite — în acest caz se afișează întotdeauna dialogul de selecție, dacă nicio aplicație nu este setată ca implicită.

Dialogul de selecție a aplicației

Dezvoltatorul poate apela programatic dialogul de selecție prin Intent.createChooser(), transmițând Intentul și un titlu. Acest lucru este util când aplicația dorește să propună explicit utilizatorului să aleagă un gestionar, chiar dacă este setată o aplicație implicită. De exemplu, la trimiterea de imagini în rețele sociale prin ACTION_SEND cu createChooser se garantează afișarea dialogului indiferent de setările implicite.

Erori tipice la configurarea Intent Filter

Una dintre cele mai frecvente erori și anume lipsa categoriei DEFAULT în Intent Filter. Dezvoltatorii copie configurația din exemple, dar uită să adauge această categorie, rezultând că Activity nu primește Intent implicite. Sistemul pur și simplu nu vede filtrul pentru apelurile implicite, deși Intent explicite continuă să funcționeze.

A doua eroare frecventă este specificarea incorectă a scheme în tagul data fără un URI complet. Dacă este specificată doar schema, dar nu și hostul, filtrul va accepta toate linkurile cu această schemă din orice sursă, ceea ce poate duce la apeluri nedorite din surse neverificate. Se recomandă să specificați întotdeauna cel puțin scheme și host.

A treia eroare este lipsa verificării intent.data la null în codul Activity. Dacă Activity este lansată nu printr-un deep link, ci în mod standard din launcher, Intent nu conține URI. Accesarea intent.data fără verificare provoacă NullPointerException și prăbușirea aplicației. Utilizați întotdeauna intent?.data?.toString() cu operatorul safe call.

întrebări frecvente

Este obligatorie specificarea category DEFAULT în Intent Filter?

Da, pentru primirea Intent implicite categoria DEFAULT este obligatorie. Fără ea, sistemul nu va transmite componentei apelurile implicite, iar Intent Filter va funcționa doar pentru Intent explicite care oricum nu verifică filtrele.

Câte Intent Filter poate avea o Activity?

Nu există limitări. O Activity poate conține orice număr de Intent Filter. Fiecare filtru descrie un scenariu separat de procesare, de exemplu un filtru pentru deep link, altul pentru procesarea fișierelor, altul pentru Share Sheet.

Cu ce diferă Intent Filter de App Link?

Intent Filter este un mecanism general pentru procesarea Intent implicite. App Link este un caz particular al Intent Filter cu verificare prin Digital Asset Links, care desemnează automat aplicația ca gestionar implicit pentru linkurile HTTPS pe un domeniu specificat.

Se poate utiliza Intent Filter pentru Service sau BroadcastReceiver?

Da, Intent Filter poate fi declarat nu doar pentru Activity, ci și pentru Service și BroadcastReceiver. Pentru Service, acest lucru permite lansarea serviciului de fundal din alte aplicații, iar pentru BroadcastReceiver — primirea mesajelor de sistem difuzate.

Cum procesează Intent Filter tipurile MIME?

Tipul MIME este specificat în tagul data prin atributele mimeType. Filtrul determină ce tipuri de date poate procesa componenta — de exemplu, image/* pentru toate imaginile sau text/plain doar pentru text simplu. Tipurile MIME pot fi combinate cu scheme URI.

Rezumat

  • Intent Filter — declarație XML în AndroidManifest.xml care definește ce Intent implicite poate procesa o componentă de aplicație.
  • Trei grupuri — action (acțiune), category (categorie), data (URI și MIME) alcătuiesc filtrul; componenta primește Intentul dacă toate grupurile specificate se potrivesc.
  • Deep link se configurează prin action VIEW și tagul data cu schemă, host și cale, opțional cu autoVerify pentru App Links.
  • App Links — linkuri HTTPS verificate prin Digital Asset Links, care nu necesită dialog de selecție a aplicației.
  • Conflictele la potrivirea mai multor filtre se rezolvă prin dialogul de sistem sau prioritate pentru componentele aceleiași aplicații.
  • Procesarea Intentului primit se realizează prin intent.data în Activity sau onReceive în BroadcastReceiver cu verificare obligatorie la null.
  • Utilizare — Intent Filter este folosit pentru interacțiunea dintre aplicații, procesarea linkurilor, fișierelor și evenimentelor de sistem.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și