Intent Filter: nədir, necə işləyir və proqramlaşdırmada istifadə olunur

Müəllif: IT Sectr Dərc olunub: 2026-05-14 Oxuma vaxtı: 8 dəq

Intent Filter — AndroidManifest.xml faylında deklarativ bəyannamədir və sistemə proqram komponentinin hansı qeyri-açıq niyyətləri emal edə biləcəyini göstərir. Android Developer Guide-a görə, filtr action, category və data ehtiva edir və onların əsasında sistem digər tətbiqlərdən və sistem hadisələrindən gələn çağırışları yönləndirir. Android proqramlaşdırması Intent Filter-dən müxtəlif tətbiqlərin komponentləri arasında zəif əlaqənin əsas mexanizmi kimi istifadə edir.

Əsas məqamlar

  • Intent Filter — manifestdə XML bəyannaməsi, Activity, Service və ya BroadcastReceiver-in emal edə biləcəyi qeyri-açıq Intent növlərini müəyyənləşdirir.
  • Action komponentin yerinə yetirməli olduğu hərəkəti göstərir — məsələn, məlumatlara baxmaq üçün ACTION_VIEW və ya məzmun göndərmək üçün ACTION_SEND.
  • Category komponentin əlavə kateqoriyasını təyin edir — BROWSABLE brauzerdən çağırışa icazə verir, DEFAULT qeyri-açıq Intent üçün tələb olunur.
  • Data URI, MIME növü və ya emal olunan məlumatların sxemini təsvir edir ki, bu da tətbiqdə deep link qurulması üçün kritik əhəmiyyət daşıyır.
  • Münaqişələr eyni Intent-i emal edən bir neçə tətbiq olduqda sistem seçim dialoqu və ya defolt parametrlərlə həll edilir.

Intent Filter nədir?

Intent Filter — Android tətbiqinin konfiqurasiya elementidir və sistemə komponentin müəyyən qeyri-açıq niyyət növlərini emal edə biləcəyi barədə məlumat verir. Konkret sinfi göstərən açıq Intent-dən fərqli olaraq, qeyri-açıq Intent yalnız tələb olunan hərəkətin təsvirini ehtiva edir və sistem qeydiyyatdan keçmiş filtrlər əsasında uyğun komponenti özü tapır.

Filtrlər komponentin daxilində — Activity, Service və ya BroadcastReceiver — AndroidManifest.xml faylında bəyan edilir. Hər bir filtr bir neçə action, category və data elementi ehtiva edə bilər. Komponentin qeyri-məhdud sayında Intent Filter-i ola bilər və hər biri ayrıca emal ssenarisini təsvir edir.

Android arxitekturasında rolu

Intent Filter tətbiq komponentləri arasında zəif əlaqə prinsipini həyata keçirir. A tətbiqi B tətbiqinin varlığından xəbərdar olmaq məcburiyyətində deyil — o, sadəcə hərəkətin təsviri ilə Intent göndərir və sistem onu filtrlər əsasında yönləndirir. Bu mexanizm Share Sheet, brauzer seçimi və deep link emalının əsasındadır.

Intent növləri: açıq və qeyri-açıq

Açıq Intent işə salınacaq komponentin konkret sinfini göstərir. Onlar bir tətbiq daxilində daxili naviqasiya üçün istifadə olunur, proqramçı hansı Activity-nin açılacağını dəqiq biləndə. Qeyri-açıq Intent yalnız hərəkətin təsvirini ehtiva edir və komponent sistem tərəfindən dinamik olaraq müəyyənləşdirilir.

Intent Filter yalnız qeyri-açıq Intent ilə işləyir. Intent-də konkret sinif göstərilərsə, sistem bütün filtrləri nəzərdən qaçırır və göstərilən komponenti birbaşa işə salır. Filtrlər yalnız qeyri-açıq çağırışları həll edərkən yoxlanılır ki, bu da onları tətbiqlərarası qarşılıqlı əlaqənin əsas elementi edir.

Açıq və qeyri-açıq Intent-in müqayisəsi

XüsusiyyətAçıq IntentQeyri-açıq Intent
KomponentAçıq şəkildə göstərilir (className)Sistem tərəfindən müəyyənləşdirilir
Intent FilterTələb olunmurMəcburidir
NümunəstartActivity(Intent(this, ProfileActivity::class.java))Intent(ACTION_VIEW, Uri.parse("https://example.com"))
TəhlükəsizlikDaha yüksək (kəsmə yoxdur)Daha aşağı (münaqişələr mümkündür)

Manifestdə Intent Filter strukturu

Hər bir Intent Filter üç qrup elementdən ibarətdir — action, category və data — onların kombinasiyası komponentin hansı Intent-ləri qəbul edəcəyini müəyyənləşdirir. Filtr Intent hər qrupun ən azı bir elementinə uyğun gəldikdə keçmiş sayılır.

Action yerinə yetirilən hərəkəti təsvir edir — baxmaq, redaktə etmək, göndərmək. Category emal üçün əlavə kontekst əlavə edir — məsələn, brauzerdən işə salma imkanı. Data URI və ya MIME növü vasitəsilə emal olunan məlumatın formatını müəyyənləşdirir.

intent-filter teqinin komponentləri

İstifadəçi profillərinə keçidləri açan Activity üçün Intent Filter nümunəsi. Filtr dəqiq yönləndirmə üçün hər üç qrup elementi ehtiva edir.

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-in məcburi göstərilməsinə diqqət yetirin — onsuz sistem komponentə qeyri-açıq Intent ötürməyəcək. BROWSABLE kateqoriyası keçid brauzerdən emal edilməli olduqda əlavə edilir.

Android-də deep link sxem, host və yolu ehtiva edən data teqi ilə VIEW action-lı Intent Filter vasitəsilə konfiqurasiya edilir. myapp://profile/42 şəklindəki keşidə kliklədikdə sistem uyğun filtri olan Activity-ni tapır və onu ötürülən URI ilə işə salır. Dəqiq uyğlaşdırma üçün pathPrefix, pathPattern və ya path-i düzgün konfiqurasiya etmək vacibdir.

Android 6-dan (API 23) başlayaraq HTTPS vasitəsilə təsdiqlənmiş deep link olan App Links dəstəyi əlavə edildi. App Links üçün eyni Intent Filter istifadə olunur, lakin Digital Asset Links vasitəsilə əlavə domen təsdiqi ilə. Təsdiqləmədən sonra sistem seçim dialoqu olmadan avtomatik olaraq tətbiqi açır.

URL üçün Data teqi

HTTPS keçidi ilə təsdiqləmə ilə App Link üçün filtr nümunəsi. Bu halda sxem həmişə https-dir və host Digital Asset Links-də göstərilən domenə uyğun gəlir.

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 atributu sistemə tətbiqin quraşdırılması zamanı Digital Asset Links-i yoxlamağı tapşırır. Təsdiqləmə uğurlu olarsa, tətbiq avtomatik olaraq göstərilən domen və yollar üçün defolt emalçıya çevrilir.

Proqram komponentlərində Intent-in emalı

Sistem Intent-i emal etmək üçün komponent seçdikdən sonra, proqramçı hədəf komponent daxilində daxil olan niyyətdən məlumatları çıxarmalıdır. Activity üçün onCreate() metodunda getIntent() istifadə olunur, BroadcastReceiver üçün isə Intent parametr kimi ötürülən onReceive() metodu istifadə olunur.

Məlumatların çıxarılması əməliyyat növünü müəyyənləşdirmək üçün action, URI üçün data və əlavə məlumat üçün extra-parametrlərin alınmasını əhatə edir. Bu elementlərin hər biri olmaya bilər, buna görə istifadədən əvvəl null yoxlaması məcburidir.

Activity-də emal kodu

Kotlin-də Activity-də daxil olan deep link-in emalı nümunƏsi. Kod Intent-dən URI-ni çıxarır və host və yol əsasında naviqasiya qərarı verir.

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

Intent və data-nın null olduğunu yoxlamaq üçün safe call operator-dən istifadə etmək tövsiyə olunur, çünki aktivlik daxil olan deep link olmadan işə salına bilər. Naviqasiyada istifadədən əvvəl host və pathSegment-i null üçün yoxlamaq da vacibdir.

Prioritet və münaqişələrin həlli

Bir neçə tətbiq eyni qeyri-açıq Intent-ə uyğun Intent Filter qeydiyyatdan keçiribsə, sistem istifadəçiyə seçim dialoqu göstərir. İstifadəçi birdəfəlik istifadə üçün tətbiq seçə və ya defolt emalçı təyin edə bilər. Android 10-dan başlayaraq seçim dialoqu yalnız ilk çağırışda göstərilir, sonra sistem istifadəçinin seçimini yadda saxlayır.

Prioriteti idarə etmək üçün intent-filter teqində android:priority atributu istifadə olunur. Dəyər nə qədər yüksək olarsa, komponentin münaqişələrin həllində prioriteti bir o qədər böyük olar. Lakin prioritet müxtəlif tətbiqlərin filtrləri üçün işləmir — bu halda heç bir tətbiq defolt olaraq təyin edilməyibsə, həmişə seçim dialoqu göstərilir.

Tətbiq seçim dialoqu

Proqramçı Intent.createChooser() vasitəsilə proqramlı şəkildə seçim dialoqunu çağıra bilər, hədəf Intent və başlığı ötürərək. Bu, tətbiq defolt olaraq təyin edilsə belə, istifadəçiyə açıq şəkildə emalçı seçməyi təklif etmək istədikdə faydalıdır. Məsələn, şəkilləri sosial şəbəkələrə ACTION_SEND ilə göndərərkən createChooser defolt parametrlərdən asılı olmayaraq dialoqun göstərilməsini təmin edir.

Intent Filter qurarkən tipik səhvlər

Ən geniş yayılmış səhvlərdən biri Intent Filter-də DEFAULT kateqoriyasının olmamasıdır. Proqramçılar konfiqurasiyanı nümunələrdən köçürürlər, lakin bu kateqoriyanı əlavə etməyi unudurlar, nəticədə Activity qeyri-açıq Intent qəbul etmir. Sistem sadəcə qeyri-açıq çağırışlar üçün filtri görmür, baxmayaraq ki, açıq Intent işləməyə davam edir.

İkinci geniş yayılmış səhv data teqində tam URI olmadan scheme-in düzgün göstərilməməsidir. Yalnız sxem göstərilər, lakin host göstərilməzsə, filtr bu sxemli bütün keçidləri istənilən mənbədən qəbul edəcək ki, bu da yoxlanılmamış mənbələrdən arzuolunmaz çağırışlara səbəb ola bilər. Həmişə ən azından scheme və host göstərmək tövsiyə olunur.

Üçüncü səhv Activity kodunda intent.data-nın null yoxlamasının olmamasıdır. Activity deep link vasitƏsilə deyil, standart şəkildə launcher-dən işə salınarsa, Intent URI ehtiva etmir. Yoxlanılmadan intent.data-ya müraciət NullPointerException-a və tətbiqin çökməsinə səbəb olur. Həmişə safe call operatoru ilə intent?.data?.toString() istifadə edin.

Tez-tez verilən suallar

Intent Filter-də category DEFAULT göstərmək məcburidirmi?

Bəli, qeyri-açıq Intent qəbul etmək üçün DEFAULT kateqoriyası məcburidir. Onsuz sistem komponentə qeyri-açıq çağırışları ötürməyəcək və Intent Filter yalnız filtrləri yoxlamayan açıq Intent üçün işləyəcək.

Bir Activity-nin neçə Intent Filter-i ola bilər?

Heç bir məhdudiyyət yoxdur. Bir Activity istənilən sayda Intent Filter ehtiva edə bilər. Hər filtr ayrıca emal ssenarisini təsvir edir, məsələn biri deep link üçün, digəri faylları emal etmək üçün, üçüncüsü Share Sheet üçün.

Intent Filter App Link-dən nə ilə fərqlənir?

Intent Filter qeyri-açıq Intent-i emal etmək üçün ümumi mexanizmdir. App Link Digital Asset Links vasitəsilə təsdiqlənmə ilə Intent Filter-in xüsusi halıdır və göstərilən domendə HTTPS keçidləri üçün tətbiqi avtomatik olaraq defolt emalçı təyin edir.

Intent Filter Service və ya BroadcastReceiver üçün istifadə edilə bilərmi?

Bəli, Intent Filter təkcə Activity üçün deyil, həm də ServiceBroadcastReceiver üçün bəyan edilə bilər. Service üçün bu, fon xidmətini digər tətbiqlərdən işə salmağa imkan verir, BroadcastReceiver üçün isə sistem genişyayım mesajlarını qəbul etməyə imkan verir.

Intent Filter MIME növlərini necə emal edir?

MIME növü data teqində mimeType atributları vasitəsilə göstərilir. Filtr komponentin hansı məlumat növlərini emal edə biləcəyini müəyyənləşdirir — məsələn, bütün şəkillər üçün image/* və ya yalnız düz mətn üçün text/plain. MIME növləri URI sxemləri ilə birləşdirilə bilər.

Xülasə

  • Intent Filter — AndroidManifest.xml-də XML bəyannaməsi, tətbiq komponentinin hansı qeyri-açıq Intent-ləri emal edə biləcəyini müəyyənləşdirir.
  • Üç qrup — action (hərəkət), category (kateqoriya), data (URI və MIME) filtri təşkil edir; komponent bütün göstərilən qruplar uyğunlaşarsa Intent alır.
  • Deep link ACTION VIEW və sxem, host və yol ilə data teqi vasitəsilə konfiqurasiya edilir, App Links üçün opsional autoVerify ilə.
  • App Links — Digital Asset Links vasitəsilə təsdiqlənmiş HTTPS keçidləri, tətbiq seçim dialoqu tələb etmir.
  • Münaqişələr bir neçə filtr uyğunlaşdıqda sistem seçim dialoqu və ya bir tətbiqin komponentləri üçün prioritet vasitƏsilə həll edilir.
  • Emal daxil olan Intent Activity-də intent.data və ya BroadcastReceiver-də onReceive vasitƏsilə həyata keçirilir, null yoxlaması məcburidir.
  • Tətbiq — Intent Filter tətbiqlərarası qarşılıqlı əlaqə, keçidlərin, faylların və sistem hadisələrinin emalı üçün istifadə olunur.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun