Intent Filter: یہ کیا ہے، ڈیولپمنٹ میں کیسے کام کرتا ہے اور استعمال ہوتا ہے

مصنف: IT Sectr اشاعت: 2026-05-14 مطالعے کا وقت: 8 منٹ

Intent Filter AndroidManifest.xml میں ایک اعلانیہ بیان ہے جو سسٹم کو بتاتا ہے کہ ایپلیکیشن کا کوئی جزو کس مضمر ارادے (implicit intent) کو سنبھال سکتا ہے۔ Android Developer Guide کے مطابق، فلٹر میں action، category اور data شامل ہوتے ہیں، جن کی بنیاد پر سسٹم دوسری ایپلیکیشنز اور سسٹم ایونٹس سے کالز کو روٹ کرتا ہے۔ Android ڈیولپمنٹ مختلف ایپلیکیشنز کے اجزاء کے درمیان کمزور جوڑے (loose coupling) کے بنیادی طریقہ کار کے طور پر Intent Filter استعمال کرتا ہے۔

اہم نکات

  • Intent Filter — مینی فیسٹ میں ایک XML اعلامیہ جو متعین کرتا ہے کہ Activity، Service یا BroadcastReceiver کس قسم کے مضمر Intent کو سنبھال سکتا ہے۔
  • Action اس عمل کی وضاحت کرتا ہے جو جزو کو انجام دینا چاہیے — مثال کے طور پر، ڈیٹا دیکھنے کے لیے ACTION_VIEW یا مواد بھیجنے کے لیے ACTION_SEND۔
  • Category جزو کا ایک اضافی زمرہ شامل کرتا ہے — BROWSABLE براؤزر سے کال کی اجازت دیتا ہے، DEFAULT مضمر Intent کے لیے ضروری ہے۔
  • Data URI، MIME قسم یا ڈیٹا کے اسکیما کی وضاحت کرتا ہے، جو ایپلیکیشن میں ڈیپ لنک ترتیب دینے کے لیے اہم ہے۔
  • تنازعات جب متعدد ایپلیکیشنز ایک ہی Intent کو سنبھالتی ہیں تو سسٹم سلیکشن ڈائیلاگ یا ڈیفالٹ سیٹنگز کے ذریعے حل کیے جاتے ہیں۔

Intent Filter کیا ہے؟

Intent Filter ایک Android ایپلیکیشن کا کنفیگریشن عنصر ہے جو سسٹم کو مخصوص قسم کے مضمر ارادوں کو سنبھالنے کے جزو کی صلاحیت کے بارے میں بتاتا ہے۔ واضح Intent کے برعکس جو ایک مخصوص کلاس متعین کرتے ہیں، مضمر Intent میں صرف مطلوبہ عمل کی تفصیل ہوتی ہے، اور سسٹم خود رجسٹرڈ فلٹرز کی بنیاد پر مناسب جزو تلاش کرتا ہے۔

فلٹرز AndroidManifest.xml فائل میں ایک جزو — Activity، Service یا BroadcastReceiver — کے اندر اعلان کیے جاتے ہیں۔ ہر فلٹر میں متعدد action، category اور data عناصر شامل ہو سکتے ہیں۔ ایک جزو میں لامحدود تعداد میں Intent Filter ہو سکتے ہیں، ہر ایک ایک علیحدہ ہینڈلنگ منظرنامے کی وضاحت کرتا ہے۔

Android فن تعمیر میں کردار

Intent Filter ایپلیکیشن کے اجزاء کے درمیان کمزور جوڑے کے اصول کو نافذ کرتا ہے۔ ایپلیکیشن A کو ایپلیکیشن B کے وجود کے بارے میں جاننے کی ضرورت نہیں ہے — یہ صرف عمل کی تفصیل کے ساتھ ایک Intent بھیجتا ہے، اور سسٹم فلٹرز کی بنیاد پر اسے روٹ کرتا ہے۔ یہ طریقہ کار Share Sheet، براؤزر سلیکشن اور ڈیپ لنک ہینڈلنگ کی بنیاد ہے۔

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 ٹیگ کے اجزاء

صارف پروفائلز کے لنکس کھولنے والی Activity کے لیے Intent Filter کی مثال۔ فلٹر میں درست روٹنگ کے لیے تینوں گروپس کے عناصر شامل ہیں۔

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 زمرہ اس وقت شامل کیا جاتا ہے جب لنک کو براؤزر سے سنبھالا جانا چاہیے۔

Android پر ڈیپ لنک کو action VIEW اور اسکیما، ہوسٹ اور پاتھ پر مشتمل data ٹیگ کے ساتھ Intent Filter کے ذریعے تشکیل دیا جاتا ہے۔ myapp://profile/42 جیسے لنک کی پیروی کرنے پر، سسٹم مماثل فلٹر والی Activity تلاش کرتا ہے اور اسے منتقل کردہ URI کے ساتھ شروع کرتا ہے۔ عین مطابق مماثلت کے لیے pathPrefix، pathPattern یا path کو درست طریقے سے تشکیل دینا ضروری ہے۔

Android 6 (API 23) سے شروع کرتے ہوئے، App Links کے لیے معاونت شامل کی گئی — HTTPS کے ذریعے تصدیق شدہ ڈیپ لنکس۔ App Links اسی Intent Filter کا استعمال کرتے ہیں لیکن Digital Asset Links کے ذریعے اضافی ڈومین تصدیق کے ساتھ۔ تصدیق کے بعد، سسٹم سلیکشن ڈائیلاگ کے بغیر خود بخود ایپلیکیشن کھولتا ہے۔

URL کے لیے Data ٹیگ

HTTPS لنک کے ذریعے تصدیق کے ساتھ App Link کے لیے فلٹر کی مثال۔ اس صورت میں اسکیما ہمیشہ 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 کو سنبھالنے کے لیے ایک جزو منتخب کرنے کے بعد، ڈیولپر کو ہدف جزو کے اندر آنے والے intent سے ڈیٹا نکالنا ہوتا ہے۔ Activity کے لیے onCreate() میں getIntent() طریقہ استعمال کیا جاتا ہے؛ BroadcastReceiver کے لیے onReceive() طریقہ استعمال کیا جاتا ہے، جہاں Intent کو پیرامیٹر کے طور پر منتقل کیا جاتا ہے۔

ڈیٹا نکالنے میں عمل کی قسم متعین کرنے کے لیے action، URI کے لیے data اور اضافی معلومات کے لیے extra پیرامیٹرز حاصل کرنا شامل ہے۔ ان میں سے ہر عنصر غائب ہو سکتا ہے، اس لیے استعمال سے پہلے null چیک لازمی ہے۔

Activity میں ہینڈلنگ کوڈ

Kotlin میں Activity میں آنے والے ڈیپ لنک کو سنبھالنے کی مثال۔ کوڈ Intent سے URI نکالتا ہے اور ہوسٹ اور پاتھ کی بنیاد پر نیویگیشن فیصلے کرتا ہے۔

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 اور data کو null کے لیے چیک کرنے کے لیے safe call آپریٹر استعمال کرنے کی سفارش کی جاتی ہے، کیونکہ ایکٹیویٹی آنے والے ڈیپ لنک کے بغیر شروع ہو سکتی ہے۔ نیویگیشن میں استعمال کرنے سے پہلے host اور pathSegment کو null کے لیے بھی چیک کرنا چاہیے۔

ترجیح اور تنازعات کا حل

اگر متعدد ایپلیکیشنز نے ایک ہی مضمر Intent سے مماثل Intent Filter رجسٹر کیا ہے، تو سسٹم صارف کو ایک سلیکشن ڈائیلاگ دکھاتا ہے۔ صارف ایک بار استعمال کے لیے کوئی ایپلیکیشن منتخب کر سکتا ہے یا ڈیفالٹ ہینڈلر متعین کر سکتا ہے۔ Android 10 سے شروع کرتے ہوئے، سلیکشن ڈائیلاگ صرف پہلی کال پر دکھایا جاتا ہے، جس کے بعد سسٹم صارف کے انتخاب کو یاد رکھتا ہے۔

ترجیح کو منظم کرنے کے لیے intent-filter ٹیگ میں android:priority وصف استعمال کیا جاتا ہے۔ قدر جتنی زیادہ ہوگی، تنازعات حل کرتے وقت جزو کی ترجیح اتنی ہی زیادہ ہوگی۔ تاہم، ترجیح مختلف ایپلیکیشنز کے فلٹرز کے لیے کام نہیں کرتی — اس صورت میں، ہمیشہ سلیکشن ڈائیلاگ دکھایا جاتا ہے اگر کوئی ایپلیکیشن ڈیفالٹ کے طور پر متعین نہ ہو۔

ایپلیکیشن سلیکشن ڈائیلاگ

ڈیولپر Intent.createChooser() کے ذریعے پروگرامائی طور پر سلیکشن ڈائیلاگ کو کال کر سکتا ہے، ہدف Intent اور ایک عنوان منتقل کر کے۔ یہ اس وقت مفید ہے جب ایپلیکیشن صارف کو واضح طور پر ایک ہینڈلر منتخب کرنے کا اختیار دینا چاہتی ہے، چاہے ڈیفالٹ ایپلیکیشن متعین ہو۔ مثال کے طور پر، ACTION_SEND کے ذریعے سوشل نیٹ ورکس پر تصاویر بھیجتے وقت createChooser کے ساتھ ڈیفالٹ سیٹنگز سے قطع نظر ڈائیلاگ دکھانے کی ضمانت دیتا ہے۔

Intent Filter ترتیب دیتے وقت عام غلطیاں

سب سے عام غلطیوں میں سے ایک Intent Filter میں DEFAULT زمرے کی عدم موجودگی ہے۔ ڈیولپرز مثالوں سے کنفیگریشن کاپی کرتے ہیں لیکن یہ زمرہ شامل کرنا بھول جاتے ہیں، جس کے نتیجے میں Activity کو مضمر Intent موصول نہیں ہوتے۔ سسٹم مضمر کالوں کے لیے فلٹر نہیں دیکھتا، اگرچہ واضح Intent کام کرتے رہتے ہیں۔

دوسری عام غلطی مکمل URI کے بغیر data ٹیگ میں scheme کی غلط وضاحت ہے۔ اگر صرف اسکیما متعین کیا گیا ہے لیکن ہوسٹ متعین نہیں ہے، تو فلٹر کسی بھی ماخذ سے اس اسکیما والے تمام لنکس قبول کرے گا، جو ناقابل بھروسہ ذرائع سے ناپسندیدہ کالوں کا سبب بن سکتا ہے۔ کم از کم scheme اور host ہمیشہ متعین کرنے کی سفارش کی جاتی ہے۔

تیسری غلطی Activity کوڈ میں intent.data کی null چیک کی عدم موجودگی ہے۔ اگر Activity ڈیپ لنک کے ذریعے نہیں بلکہ لانچر سے معیاری طریقے سے شروع ہوتی ہے، تو Intent میں URI شامل نہیں ہوتا ہے۔ چیک کے بغیر intent.data تک رسائی NullPointerException کا سبب بنتی ہے اور ایپلیکیشن کریش ہو جاتی ہے۔ safe call آپریٹر کے ساتھ ہمیشہ intent?.data?.toString() استعمال کریں۔

اکثر پوچھے گئے سوالات

کیا Intent Filter میں category DEFAULT متعین کرنا لازمی ہے؟

ہاں، مضمر Intent حاصل کرنے کے لیے DEFAULT زمرہ لازمی ہے۔ اس کے بغیر، سسٹم جزو کو مضمر کالیں منتقل نہیں کرے گا، اور Intent Filter صرف واضح Intent کے لیے کام کرے گا، جو ویسے بھی فلٹرز کی جانچ نہیں کرتے۔

ایک Activity میں کتنے Intent Filter ہو سکتے ہیں؟

کوئی حد نہیں ہے۔ ایک Activity میں کسی بھی تعداد میں Intent Filter ہو سکتے ہیں۔ ہر فلٹر ایک علیحدہ ہینڈلنگ منظرنامے کی وضاحت کرتا ہے، مثال کے طور پر ایک فلٹر ڈیپ لنک کے لیے، دوسرا فائل ہینڈلنگ کے لیے، تیسرا Share Sheet کے لیے۔

Intent Filter App Link سے کیسے مختلف ہے؟

Intent Filter مضمر Intent کو سنبھالنے کا ایک عام طریقہ کار ہے۔ App Link Digital Asset Links کے ذریعے تصدیق کے ساتھ Intent Filter کی ایک خاص صورت ہے، جو خود بخود ایپلیکیشن کو متعین کردہ ڈومین پر 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 — AndroidManifest.xml میں ایک XML اعلامیہ جو متعین کرتا ہے کہ ایپلیکیشن کا جزو کون سے مضمر Intent کو سنبھال سکتا ہے۔
  • تین گروپ — action، category، data (URI اور MIME) فلٹر تشکیل دیتے ہیں؛ اگر تمام متعین کردہ گروپ مماثل ہوں تو جزو Intent وصول کرتا ہے۔
  • ڈیپ لنک action VIEW اور اسکیما، ہوسٹ اور پاتھ کے ساتھ data ٹیگ کے ذریعے تشکیل دیا جاتا ہے، App Links کے لیے اختیاری طور پر autoVerify کے ساتھ۔
  • App Links — Digital Asset Links کے ذریعے تصدیق شدہ HTTPS لنکس جنہیں ایپلیکیشن سلیکشن ڈائیلاگ کی ضرورت نہیں ہوتی۔
  • تنازعات جب متعدد فلٹر مماثل ہوتے ہیں تو سسٹم ڈائیلاگ یا ایک ہی ایپلیکیشن کے اجزاء کے لیے ترجیح سے حل کیے جاتے ہیں۔
  • ہینڈلنگ آنے والے Intent کی ہینڈلنگ Activity میں intent.data کے ذریعے یا BroadcastReceiver میں onReceive کے ذریعے لازمی null چیک کے ساتھ کی جاتی ہے۔
  • استعمال — Intent Filter بین ایپلیکیشن تعامل، لنکس، فائلوں اور سسٹم ایونٹس کو سنبھالنے کے لیے استعمال کیا جاتا ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں