Intent Filter: nima, qanday ishlaydi va dasturlashda ishlatiladi

Muallif: IT Sectr Nashr etilgan: 2026-05-14 O'qish vaqti: 8 daq

Intent Filter — AndroidManifest.xml faylidagi deklarativ bayonot bo'lib, tizimga dastur komponenti qanday noaniq niyatlarni qayta ishlashi mumkinligini ko'rsatadi. Android Developer Guide ga ko'ra, filtr action, category va data ni o'z ichiga oladi va ular asosida tizim boshqa ilovalar va tizim hodisalaridan kelgan chaqiruvlarni yo'naltiradi. Android dasturlash Intent Filter dan turli ilovalar komponentlari orasidagi zaif bog'lanishning asosiy mexanizmi sifatida foydalanadi.

Asosiy ma'lumotlar

  • Intent Filter — manifestdagi XML deklaratsiyasi, Activity, Service yoki BroadcastReceiver qayta ishlashi mumkin bo'lgan noaniq Intent turlarini belgilaydi.
  • Action komponent bajarishi kerak bo'lgan harakatni ko'rsatadi — masalan, ma'lumotlarni ko'rish uchun ACTION_VIEW yoki kontent yuborish uchun ACTION_SEND.
  • Category komponentning qo'shimcha toifasini belgilaydi — BROWSABLE brauzerdan chaqirishga ruxsat beradi, DEFAULT noaniq Intent uchun talab qilinadi.
  • Data URI, MIME turi yoki qayta ishlanadigan ma'lumotlar sxemasini tavsiflaydi, bu ilovada deep link sozlash uchun juda muhimdir.
  • Konfliktlar bir xil Intent ni qayta ishlaydigan bir nechta ilovalar mavjud bo'lganda, tizim tanlash dialogi yoki standart sozlamalar bilan hal qilinadi.

Intent Filter nima?

Intent Filter — Android ilovasining konfiguratsiya elementi bo'lib, tizimga komponentning ma'lum turdagi noaniq niyatlarni qayta ishlash qobiliyati haqida xabar beradi. Muayyan sinfni ko'rsatadigan aniq Intent dan farqli o'laroq, noaniq Intent faqat talab qilingan harakat tavsifini o'z ichiga oladi va tizim ro'yxatdan o'tgan filtrlar asosida mos komponentni o'zi topadi.

Filtrlar komponent ichida — Activity, Service yoki BroadcastReceiver — AndroidManifest.xml faylida e'lon qilinadi. Har bir filtr bir nechta action, category va data elementlarini o'z ichiga olishi mumkin. Komponent cheksiz miqdordagi Intent Filter ga ega bo'lishi mumkin va ularning har biri alohida ishlov berish stsenariysini tavsiflaydi.

Android arxitekturasidagi roli

Intent Filter ilovalar komponentlari o'rtasida zaif bog'lanish tamoyilini amalga oshiradi. A ilovasi B ilovasining mavjudligi haqida bilishi shart emas — u oddiygina harakat tavsifi bilan Intent yuboradi va tizim uni filtrlar asosida yo'naltiradi. Bu mexanizm Share Sheet, brauzer tanlash va deep link ni qayta ishlash asosida yotadi.

Intent turlari: aniq va noaniq

Aniq Intent ishga tushiriladigan komponentning aniq sinfini ko'rsatadi. Ular bitta ilova ichidagi ichki navigatsiya uchun ishlatiladi, dasturchi qaysi Activity ochilishini aniq bilganda. Noaniq Intent faqat harakat tavsifini o'z ichiga oladi va komponent tizim tomonidan dinamik ravishda aniqlanadi.

Intent Filter faqat noaniq Intent bilan ishlaydi. Agar Intent da aniq sinf ko'rsatilgan bo'lsa, tizim barcha filtrlarni e'tiborsiz qoldiradi va ko'rsatilgan komponentni to'g'ridan-to'g'ri ishga tushiradi. Filtrlar faqat noaniq chaqiruvlarni hal qilishda tekshiriladi, bu ularni ilovalararo o'zaro aloqaning asosiy elementiga aylantiradi.

Aniq va noaniq Intent solishtiruvi

XususiyatAniq IntentNoaniq Intent
KomponentAniq ko'rsatilgan (className)Tizim tomonidan aniqlanadi
Intent FilterKerak emasMajburiy
MisolstartActivity(Intent(this, ProfileActivity::class.java))Intent(ACTION_VIEW, Uri.parse("https://example.com"))
XavfsizlikYuqori (tutib olish yo'q)Past (konfliktlar mumkin)

Manifestdagi Intent Filter tuzilishi

Har bir Intent Filter uch guruh elementdan iborat — action, category va data — ularning kombinatsiyasi komponent qaysi Intent larni qabul qilishini belgilaydi. Filtr Intent har bir guruhning kamida bitta elementiga mos kelsa, o'tgan hisoblanadi.

Action bajarilayotgan harakatni tavsiflaydi — ko'rish, tahrirlash, yuborish. Category qayta ishlash uchun qo'shimcha kontekst qo'shadi — masalan, brauzerdan ishga tushirish imkoniyati. Data URI yoki MIME turi orqali qayta ishlanadigan ma'lumot formatini belgilaydi.

intent-filter tegining komponentlari

Foydalanuvchi profillari havolalarini ochadigan Activity uchun Intent Filter namunasi. Filtr aniq yo'naltirish uchun uch guruh elementni ham o'z ichiga oladi.

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 ni majburiy ko'rsatishga e'tibor bering — usiz tizim komponentga noaniq Intent larni o'tkazmaydi. BROWSABLE toifasi havola brauzerdan qayta ishlanishi kerak bo'lganda qo'shiladi.

Android da deep link ACTION VIEW va sxema, host va yo'lni o'z ichiga olgan data tegi bilan Intent Filter orqali sozlanadi. myapp://profile/42 ko'rinishidagi havolani bosganda, tizim mos filtrga ega Activity ni topadi va uni uzatilgan URI bilan ishga tushiradi. Aniq moslashtirish uchun pathPrefix, pathPattern yoki path ni to'g'ri sozlash muhimdir.

Android 6 (API 23) dan boshlab HTTPS orqali tasdiqlangan deep link bo'lgan App Links qo'llab-quvvatlandi. App Links uchun xuddi shu Intent Filter ishlatiladi, lekin Digital Asset Links orqali qo'shimcha domen tekshiruvi bilan. Tasdiqlashdan so'ng tizim tanlash dialogisiz avtomatik ravishda ilovani ochadi.

URL uchun data tegi

HTTPS havolasi bilan tasdiqlangan App Link uchun filtr namunasi. Bu holda sxema har doim https va host Digital Asset Links da ko'rsatilgan domenga mos keladi.

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 atributi tizimga ilovani o'rnatish vaqtida Digital Asset Links ni tekshirishni buyuradi. Tasdiqlash muvaffaqiyatli bo'lsa, ilova avtomatik ravishda belgilangan domen va yo'llar uchun standart ishlov beruvchiga aylanadi.

Ilova komponentlarida Intent ni qayta ishlash

Tizim Intent ni qayta ishlash uchun komponentni tanlagandan so'ng, dasturchi maqsadli komponent ichida kiruvchi niyatdan ma'lumotlarni olishi kerak. Activity uchun onCreate() da getIntent() metodi ishlatiladi, BroadcastReceiver uchun esa Intent parametr sifatida uzatiladigan onReceive() metodi ishlatiladi.

Ma'lumotlarni olish operatsiya turini aniqlash uchun action, URI uchun data va qo'shimcha ma'lumot uchun extra-parametrlarni olishni o'z ichiga oladi. Bu elementlarning har biri mavjud bo'lmasligi mumkin, shuning uchun ishlatishdan oldin null tekshiruvi majburiydir.

Activity dagi qayta ishlash kodi

Kotlin da Activity ga kiruvchi deep link ni qayta ishlash namunasi. Kod Intent dan URI ni oladi va host va yo'l asosida navigatsiya qarorini qabul qiladi.

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 va data ni null ga tekshirish uchun safe call operator dan foydalanish tavsiya etiladi, chunki faollik kiruvchi deep linksiz ishga tushirilishi mumkin. Shuningdek, navigatsiyada ishlatishdan oldin host va pathSegment ni null ga tekshirish kerak.

Prioritet va konfliktlarni hal qilish

Agar bir nechta ilovalar bir xil noaniq Intent ga mos keladigan Intent Filter ni ro'yxatdan o'tkazgan bo'lsa, tizim foydalanuvchiga tanlash dialogini ko'rsatadi. Foydalanuvchi bir martalik foydalanish uchun ilovani tanlashi yoki standart ishlov beruvchini o'rnatishi mumkin. Android 10 dan boshlab tanlash dialogi faqat birinchi chaqiruvda ko'rsatiladi, keyin tizim foydalanuvchi tanlovini eslab qoladi.

Prioritetni boshqarish uchun intent-filter tegida android:priority atributi ishlatiladi. Qiymat qanchalik yuqori bo'lsa, komponentning konfliktlarni hal qilishda ustunligi shunchalik yuqori bo'ladi. Biroq, ustunlik turli ilovalarning filtrlari uchun ishlamaydi — bu holda, agar hech qanday ilova standart qilib o'rnatilmagan bo'lsa, har doim tanlash dialogi ko'rsatiladi.

Ilova tanlash dialogi

Dasturchi Intent.createChooser() orqali dasturiy ravishda tanlash dialogini chaqirishi mumkin, maqsadli Intent va sarlavhani uzatadi. Bu, agar standart ilova o'rnatilgan bo'lsa ham, ilova foydalanuvchiga aniq ishlov beruvchini tanlashni taklif qilmoqchi bo'lganda foydalidir. Masalan, ACTION_SEND orqali ijtimoiy tarmoqlarga rasmlarni yuborishda createChooser standart sozlamalardan qat'iy nazar dialogning ko'rsatilishini kafolatlaydi.

Intent Filter sozlashdagi odatiy xatolar

Eng keng tarqalgan xatolardan biri Intent Filter da DEFAULT toifasining yo'qligi. Dasturchilar konfiguratsiyani misollardan nusxalaydilar, lekin bu toifani qo'shishni unutadilar, natijada Activity noaniq Intent larni qabul qilmaydi. Tizim oddiygina noaniq chaqiruvlar uchun filtrni ko'rmaydi, garchi aniq Intent lar ishlashda davom etsa ham.

Ikkinchi keng tarqalgan xato data tegida to'liq URIsiz scheme ni noto'g'ri ko'rsatishdir. Agar faqat sxema ko'rsatilsa, lekin host ko'rsatilmasa, filtr istalgan manbadan ushbu sxemali barcha havolalarni qabul qiladi, bu tekshirilmagan manbalardan kiruvchi chaqiruvlarga olib kelishi mumkin. Har doim kamida scheme va host ni ko'rsatish tavsiya etiladi.

Uchinchi xato Activity kodida intent.data ni null ga tekshirmaslikdir. Agar Activity deep link orqali emas, balki standart usulda launcher dan ishga tushirilsa, Intent URI ni o'z ichiga olmaydi. Tekshirilmasdan intent.data ga murojaat qilish NullPointerException va ilovaning ishdan chiqishiga sabab bo'ladi. Har doim safe call operatori bilan intent?.data?.toString() dan foydalaning.

Ko'p beriladigan savollar

Intent Filter da category DEFAULT ko'rsatish majburiymi?

Ha, noaniq Intent larni qabul qilish uchun DEFAULT toifasi majburiydir. Usiz tizim komponentga noaniq chaqiruvlarni o'tkazmaydi va Intent Filter faqat filtrlarni tekshirmaydigan aniq Intent lar uchun ishlaydi.

Bitta Activity nechta Intent Filter ga ega bo'lishi mumkin?

Hech qanday cheklov yo'q. Bitta Activity istalgan miqdordagi Intent Filter ga ega bo'lishi mumkin. Har bir filtr alohida ishlov berish stsenariysini tavsiflaydi, masalan biri deep link uchun, ikkinchisi fayllarni qayta ishlash uchun, uchinchisi Share Sheet uchun.

Intent Filter App Link dan nimasi bilan farq qiladi?

Intent Filter noaniq Intent larni qayta ishlash uchun umumiy mexanizmdir. App Link — bu Digital Asset Links orqali tasdiqlash bilan Intent Filter ning alohida holati bo'lib, belgilangan domendagi HTTPS havolalari uchun ilovani avtomatik ravishda standart ishlov beruvchi qilib tayinlaydi.

Intent Filter Service yoki BroadcastReceiver uchun ishlatilishi mumkinmi?

Ha, Intent Filter nafaqat Activity, balki Service va BroadcastReceiver uchun ham e'lon qilinishi mumkin. Service uchun bu fon xizmatini boshqa ilovalardan ishga tushirishga imkon beradi, BroadcastReceiver uchun esa tizim radioeshittirish xabarlarini qabul qilishga imkon beradi.

Intent Filter MIME turlarini qanday qayta ishlaydi?

MIME turi data tegida mimeType atributlari orqali ko'rsatiladi. Filtr komponent qanday ma'lumot turlarini qayta ishlashi mumkinligini belgilaydi — masalan, barcha rasmlar uchun image/* yoki faqat oddiy matn uchun text/plain. MIME turlari URI sxemalari bilan birlashtirilishi mumkin.

Xulosa

  • Intent Filter — AndroidManifest.xml dagi XML deklaratsiyasi, ilova komponenti qaysi noaniq Intent larni qayta ishlashi mumkinligini belgilaydi.
  • Uch guruh — action (harakat), category (toifa), data (URI va MIME) filtrni tashkil qiladi; komponent Intent ni barcha ko'rsatilgan guruhlar mos kelsa oladi.
  • Deep link ACTION VIEW va sxema, host va yo'l bilan data tegi orqali sozlanadi, App Links uchun ixtiyoriy autoVerify bilan.
  • App Links — Digital Asset Links orqali tasdiqlangan HTTPS havolalari, ilova tanlash dialogini talab qilmaydi.
  • Konfliktlar bir nechta filtr mos kelganda tizim tanlash dialogi yoki bitta ilova komponentlari uchun ustunlik bilan hal qilinadi.
  • Qayta ishlash kiruvchi Intent Activity da intent.data yoki BroadcastReceiver da onReceive orqali amalga oshiriladi, null tekshiruvi majburiy.
  • Qo'llash — Intent Filter ilovalararo o'zaro aloqa, havolalar, fayllar va tizim hodisalarini qayta ishlash uchun ishlatiladi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing