Intent Filter: шта је, како ради и користи се у развоју

Аутор: IT Sectr Објављено: 2026-05-14 Време читања: 8 мин

Intent Filter је декларативна изјава у AndroidManifest.xml која указује систему које неексплицитне намјере компонента апликације може да обради. Према Android Developer Guide-у, филтер садржи action, category и data, на основу којих систем усмерава позиве из других апликација и системских догађаја. Андроид развој користи Intent Filter као основни механизам слабе повезаности између компонената различитих апликација.

Главно

  • Intent Filter — XML декларација у манифесту која одређује типове неексплицитних Intent које Activity, Service или BroadcastReceiver може да обради.
  • Action указује радњу коју компонента треба да изврши — на пример, ACTION_VIEW за преглед података или ACTION_SEND за слање садржаја.
  • Category поставља додатну категорију компоненте — BROWSABLE дозвољава позив из прегледача, DEFAULT је потребан за неексплицитне Intent.
  • Data описује URI, MIME тип или шему података који се обрађују, што је критично за подешавање deep link-а у апликацији.
  • Сукоби када постоји више апликација које обрађују исти Intent решавају се системским дијалогом за избор или подразумеваним поставкама.

Шта је Intent Filter?

Intent Filter је елемент конфигурације Андроид апликације који обавештава систем да компонента може да обради одређене типове неексплицитних намјера. За разлику од експлицитних Intent-а који указују одређену класу, неексплицитни Intent садрже само опис потребне радње, а систем сам проналази одговарајућу компоненту на основу регистрованих филтера.

Филтери се изјављују унутар компоненте — Activity, Service или BroadcastReceiver — у датотеци AndroidManifest.xml. Сваки филтер може да садржи више елемената action, category и data. Компонента може да има неограничен број Intent Filter-а, од којих сваки описује засебни сценарио обраде.

Улога у Андроид архитектури

Intent Filter остварује принцип слабе повезаности између компонената апликација. Апликација A не мора да зна за постојање апликације B — она једноставно шаље Intent са описом радње, а систем га усмерава на основу филтера. Овај механизам је основа Share Sheet-а, избора прегледача и обраде deep link-а.

Типови Intent-а: експлицитни и имплицитни

Експлицитни Intent указују одређену класу компоненте за покретање. Користе се за унутрашњу навигацију у оквиру једне апликације, када развојач тачно зна која Activity треба да се отвори. Неексплицитни Intent садрже само опис радње, а компоненту систем одређује динамички.

Intent Filter ради искључиво са неексплицитним Intent-има. Ако је у Intent-у наведена конкретна класа, систем занемарује све филтере и покреће наведену компоненту директно. Филтери се проверавају само при решавању неексплицитних позива, што их чини кључним елементом међуапликацијске интеракције.

Поређење експлицитних и имплицитних Intent-а

КарактеристикаЕксплицитни IntentИмплицитни Intent
КомпонентаНаведена експлицитно (className)Одређује је систем
Intent FilterНије потребанОбавезан
ПримјерstartActivity(Intent(this, ProfileActivity::class.java))Intent(ACTION_VIEW, Uri.parse("https://example.com"))
СигурностВећа (без пресретања)Мања (могући сукоби)

Структура Intent Filter-а у манифесту

Сваки Intent Filter се састоји од три групе елемената — action, category и data — чија комбинација одређује које Intent ће компонента примати. Филтер се сматра пролазним ако Intent одговара бар једном елементу из сваке групе.

Action описује радњу која се извршава — преглед, уређивање, слање. Category додаје додатни контекст обраде — на пример, могућност покретања из прегледача. Data одређује формат информација које се обрађују путем URI или MIME типа.

Компоненте intent-filter тага

Примјер Intent Filter-а за Activity која отвара линкове ка профилима корисника. Филтер укључује све три групе елемената за прецизно усмеравање.

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>

Обратите пажњу на обавезно навођење category DEFAULT — без ње систем неће преносити компоненти неексплицитне Intent. BROWSABLE категорија се додаје ако линк треба да се обрађује из прегледача.

Deep link на Android-у се подешава путем Intent Filter-а са action VIEW и tagom data који садржи шему, хост и путању. Када се кликне на линк облика myapp://profile/42, систем проналази Activity са одговарајућим филтером и покреће је са прослеђеним URI-јем. Важно је правилно подесити pathPrefix, pathPattern или path за прецизно подударање.

Од Android 6 (API 23) појавила се подршка за App Links — верификоване deep link-ове путем HTTPS-а. За App Links се користи исти Intent Filter, али са додатном верификацијом домена путем Digital Asset Links. Након верификације, систем аутоматски отвара апликацију без дијалога за избор.

Data таг за URL

Примјер филтера за App Link са верификацијом путем HTTPS линка. У овом случају шема је увијек https, а хост одговара домену наведеном у 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>

Атрибут autoVerify наређује систему да провери Digital Asset Links при инсталацији апликације. Ако верификација успе, апликација аутоматски постаје подразумевани обрађивач за наведени домен и путање.

Обрада Intent-а у компонентама апликације

Након што систем изабере компоненту за обраду Intent-а, развојач мора да извуче податке из долазеће намјере унутар циљне компоненте. За Activity се користи метода getIntent() у onCreate(), за BroadcastReceiver — метода onReceive(), где се Intent прослеђује као параметар.

Извлачење података укључује добијање action-а за одређивање типа операције, data-а за URI и extra-параметара за додатне информације. Сваки од ових елемената може да изостаје, па је обавезна провера на null пре употребе.

Код обраде у Activity

Примјер обраде долазећег deep link-а у Activity на Kotlin-у. Код извлачи URI из Intent-а и на основу хоста и путање доноси одлуку о навигацији.

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

Препоручује се кориштење safe call operator-а за проверу intent и data на null, јер се активност може покренути без долазећег deep link-а. Такође треба проверити host и pathSegment на null пре њиховог кориштења у навигацији.

Приоритет и решавање сукоба

Ако више апликација региструју Intent Filter који одговарају истом неексплицитном Intent-у, систем приказује кориснику дијалог за избор. Корисник може да изабере апликацију за једнократну употребу или постави подразумеваног обрађивача. Од Android 10, дијалог за избор се приказује само при првом позиву, након чега систем памти избор корисника.

За управљање приоритетом користи се атрибут android:priority у intent-filter тагу. Што је већа вредност, већи је приоритет компоненте при решавању сукоба. Међутим, приоритет не ради за филтере из различитих апликација — у овом случају се увијек приказује дијалог за избор, ако ниједна апликација није постављена као подразумевана.

Дијалог за избор апликације

Развојач може програмски да позове дијалог за избор путем Intent.createChooser(), проследујући циљни Intent и наслов. Ово је корисно када апликација жели експлицитно да понуди кориснику да изабере обрађивача, чак и ако је подразумевана апликација већ постављена. На пример, при слању слика у друштвене мреже путем ACTION_SEND са createChooser осигурава приказ дијалога без обзира на подразумеване поставке.

Типичне грешке при подешавању Intent Filter-а

Једна од најчешћих грешака је недостатак категорије DEFAULT у Intent Filter-у. Развојачи копирају конфигурацију из примјера, али забораве да додају ову категорију, па Activity не прима неексплицитне Intent. Систем једноставно не види филтер за неексплицитне позиве, иако експлицитни Intent настављају да раде.

Друга честа грешка је неправилно навођење scheme-а у data тагу без пуног URI-ја. Ако је наведена само шема, али не и хост, филтер ће прихватати све линкове са овом шемом из било којег извора, што може довести до нежељених позива из неповерених извора. Препоручује се увијек наводити бар scheme и host.

Трећа грешка је недостатак провере intent.data на null у коду Activity. Ако се Activity покреће не путем deep link-а, већ стандардно из ланчера, Intent не садржи URI. Позивање intent.data без провере изазива NullPointerException и пад апликације. Увијек користите intent?.data?.toString() са safe call оператором.

Често постављана питања

Да ли је обавезно навести category DEFAULT у Intent Filter-у?

Да, за примање неексплицитних Intent категорија DEFAULT је обавезна. Без ње систем неће преносити компоненти неексплицитне позиве, а Intent Filter ће радити само за експлицитне Intent који ионако не проверавају филтере.

Колико Intent Filter-а може имати једна Activity?

Нема ограничења. Једна Activity може да садржи било који број Intent Filter-а. Сваки филтер описује засебан сценарио обраде, на пример један филтер за deep link, други за обраду датотека, трећи за Share Sheet.

По чему се Intent Filter разликује од App Link-а?

Intent Filter је општи механизам за обраду неексплицитних Intent-а. App Link је посебан случај Intent Filter-а са верификацијом путем Digital Asset Links, који аутоматски поставља апликацију као подразумеваног обрађивача за HTTPS линкове на одређеном домену.

Може ли се Intent Filter користити за Service или BroadcastReceiver?

Да, Intent Filter се може декларисати не само за Activity, већ и за Service и BroadcastReceiver. За Service, ово омогућава покретање позадинске услуге из других апликација, за BroadcastReceiver — примање системских разглашних порука.

Како Intent Filter обрађује MIME типове?

MIME тип се наводи у data тагу путем атрибута mimeType. Филтер одређује које типове података компонента може да обради — на пример, image/* за све слике или text/plain само за обичан текст. MIME типови могу да се комбинују са URI шемама.

Резиме

  • Intent Filter — XML декларација у AndroidManifest.xml која одређује које неексплицитне Intent компонента апликације може да обради.
  • Три групе — action (радња), category (категорија), data (URI и MIME) чине филтер; компонента прима Intent ако се подударају све наведене групе.
  • Deep link се подешава путем action VIEW и data тага са шемом, хостом и путањом, опционално са autoVerify за App Links.
  • App Links — верификовани HTTPS линкови путем Digital Asset Links, који не захтевају дијалог за избор апликације.
  • Сукоби код подударања више филтера решавају се системским дијалогом или приоритетом за компоненте једне апликације.
  • Обрада долазећег Intent-а врши се путем intent.data у Activity или onReceive у BroadcastReceiver са обавезном провером на null.
  • Примена — Intent Filter се користи за међуапликацијску интеракцију, обраду линкова, датотека и системских догађаја.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође