Broadcast Receiver Android کا ایک جزئے ہے جو سیسٹم Broadcast پیغامات کو سنتا اور پروسیس کرتا ہے، جیسے نیٹ ورک کی حالت میں تبدیلی، بیٹری کی لیول، SMS وصول یا ایپ کی اینسٹالیشن۔ یہ آپریٹنگ سیسٹم کے ذریعے واقعہ کے وقوع پر لنچ کیا جاتا ہے اور اپنا کام میئن ایوریئے پر یا پس منظر سروس کے ذریعے انجام دیتا ہے۔ Android Developer Guide, 2026 کے مطابق، Broadcast Receiver ایپلیکیشن کو چلنے کے بغیر بھی عالمی سیسٹم واقعات پر ریاکٹ کرنے کی اجازت دیتا ہے، جو اسے Android ایکو سسٹم میں پس منظر واقعہ پروسیسنگ کے لیے ایک کلیڈی میکانزم بناتا ہے۔
اهم نکات
Broadcast Receiver ایک Android جزئے ہے جو آپریٹنگ سیسٹم یا دیگر ایپلیکیشنز کے ذریعے تقسیم کیے گئے Intent پیغامات کو وصول کرنے اور پروسیس کرنے کے لیے ڈیزائن کیا گیا ہے۔ Activity اور Service کے برعکس، Broadcast Receiver کا کوئی صرف کا انٹرفیس نہیں ہے — اسکا کام واقعہ کے وقوع پر ایک مختصر کارروائی انجام دینا ہے۔
Broadcast Receiver Intent میکانزم کے ذریعے کام کرتا ہے۔ سیسٹم یا کوئی ایپلیکیشن sendBroadcast یا sendOrderedBroadcast کے ذریعے Intent بھیجتا ہے، اور آپریٹنگ سیسٹم اسے رجسٹرڈ ریسیورز کو پہنچاتا ہے۔ ہر ریسیور onReceive طریقے میں Intent وصول کرتا ہے، جو میئن ایوریئے پر چلتا ہے۔
Android Compatibility Definition Document کے مطابق، ایک Broadcast Receiver کو 10 سیکنڈ کے اندر onReceive مکمل کرنا ہوگا — ورنہ سیسٹم اسے معطل سمجھ کر پروسیس ختم کر دیتا ہے۔ طویل پس منظر کاموں کے لیے، ریسیور سے JobScheduler یا WorkManager لنچ کریں۔
Android Broadcast کی دو اہم اقسام کو سپورٹ کرتا ہے: Normal Broadcast اور Ordered Broadcast۔ فرق ترسیل کے ترتیب اور پروسیسنگ چین کو منقطع کرنے کی صلاحیت میں ہے۔ مزید برآن، Broadcast سیسٹم (OS کے ذریعے تیار کردہ) اور کسٹم (ایپلیکیشن کے ذریعے تیار کردہ) میں تقسیم ہوتے ہیں۔
Normal Broadcast بغیر گارنٹی ترتیب کے تمام رجسٹرڈ ریسیورز کو غیر متزامن طور پر پہنچایا جاتا ہے۔ سیسٹم ایسے Broadcast کو متوازی طور پر پروسیس کر سکتا ہے — ہر ریسیور اپنے تھریڈ میں Intent وصول کرتا ہے۔ Normal Broadcast پر abortBroadcast کال کرنے کا کوئی اثر نہیں ہے: دیگر ریسیورز کو پہنچانا منسوخ نہیں کیا جا سکتا۔
Ordered Broadcast مسلسل طور پر پہنچایا جاتا ہے — ہر ریسیور کو android:priority ٹیکھو کے اوتاری ترتیب میں (0 سے 999 تک)۔ پروسیسنگ کے بعد، ریسیور setResultExtras کے ذریعے نتیجہ اگلے کو بھیج سکتا ہے یا abortBroadcast کال کر چین کو منقطع کر سکتا ہے۔ یہ ایسے مناظر میں استعمال ہوتا ہے جہاں پروسیسنگ کا ترتیب اہم ہے — مثال کے طور پر، SMS ریسیورز۔
Android بہت سارے سیسٹم Broadcast تیار کرتا ہے: ACTION_BOOT_COMPLETED (ڈائیوس بوٹ), ACTION_BATTERY_LOW, ACTION_POWER_CONNECTED, CONNECTIVITY_ACTION, ACTION_PACKAGE_ADDED اور دیگر۔ ہر Intent میں Extras میں اضافی ڈیٹا ہوتا ہے — بیٹری کی لیول، کنیکشن کی قسم، پیکیج کا نام۔
| Broadcast کی قسم | ترتیب | abortBroadcast | کارکردگی |
|---|---|---|---|
| Normal | گارنٹی نہیں | کام نہیں کرتا | اعلی (متوازی) |
| Ordered | اولیئیٹ کے مطابق | کام کرتا ہے | درمیان (مسلسل) |
| Sticky | ایک قیمت | لاغو نہیں | کم (API 21 سے منسوخ) |
Sticky Broadcast ایک منسوخ قسم ہے جو آخری بھیجی گئی قیمت کو محفوظ رکھتی تھی۔ اس کے بجائے، آخری حالت کو ذیادہ کرنے کے لیے LiveData، StateFlow یا مشترکہ SharedPreferences استعمال کریں۔
Broadcast Receiver کو دو طریقوں سے رجسٹر کیا جا سکتا ہے: مستقل طور پر AndroidManifest.xml کے ذریعے یا متحرک طور پر کوڈ میں registerReceiver کے ذریعے۔ انتخاب مناظر پر منحصر ہے: مستقل رجسٹریشن اس ترقیب سے کام کرتا ہے جب ایپلیکیشن نہیں چل رہا ہو، متحرک رجسٹریشن صرف اس وقت کام کرتا ہے جب رجسٹر کرنے والا جزئے فعال ہو۔
مستقل رجسٹریشن مینیفیسٹ میں <receiver> ٹیگ کے ساتھ <application> کے اندر اعلان کیا جاتا ہے۔ ہر ریسیور کے لیے، ہینڈلر کلاس اور انٹرسیپٹ کرنے کے لیے اقدامات کے ساتھ ایک Intent فلٹر مختص کیا جاتا ہے۔ سیسٹم ان ریسیورز کو Broadcast کے وقوع پر لوڈ کرتا ہے چاہے ایپلیکیشن نہ چل رہا ہو۔
<!-- Static Broadcast Receiver registration in manifest -->
<receiver android:name=".BootReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
متحرک رجسٹریشن Activity، Service یا Fragment کوڈ میں registerReceiver طریقے کا استعمال کرکے کیا جاتا ہے۔ ریسیور صرف اس وقت تک زندہ رہتا ہے جب تک اسے رجسٹر کرنے والا جزئے زندہ ہو۔ onPause یا onDestroy میں ہمیشہ unregisterReceiver کال کریں — ورنہ میموری لیک ہوتی ہے اور سیسٹم پروسیس ختم کر سکتا ہے۔
Ordered Broadcast کے لیے ترسیل کا ترتیب android:priority ٹیکھو کے ذریعے متعین کیا جاتا ہے۔ اعلی اولیئیٹ کا ریسیور پہلے Intent وصول کرتا ہے۔ اگر یہ پروسیسنگ کے بعد abortBroadcast کال کرتا ہے تو کم اولیئیٹ والے ریسیورز کو Intent نہیں ملے گا۔ مستقل ریسیورز کے لیے، مینیفیسٹ کے Intent فلٹر میں اولیئیٹ مقرر کی جاتی ہے۔
Ordered Broadcast میں ریسیورز setResultExtras یا setResultData کے ذریعے زنجیر میں اگلے ریسیور کو ڈیٹا بھیج سکتے ہیں۔ یہ پائپ لائن پروسیسنگ کی اجازت دیتا ہے: پہلا ریسیور Intent کو اضافی ڈیٹا سے مالامال کرتا ہے، دوسرا اسے استعمال کرتا ہے، تیسرا زنجیر مکمل کرتا ہے۔ getResultExtras طریقہ پځھلے ریسیور کے ذریعے بھیجے گئے ڈیٹا کو پڑھتا ہے۔
Normal Broadcast کے لیے ترتیب گارنٹی نہیں ہے، لہذا تمام ریسیورز بدلے بغیر اصلی Intent وصول کرتے ہیں۔ اگر آپ کو ضرورت ہے کہ ریسیورز ایک دوسرے کو متاثر کریں تو sendBroadcast کے بجائے sendOrderedBroadcast استعمال کریں۔
Android 8 (API 26, Oreo) نے پس منظر Broadcast پر اہم پابندیاں متعارف کرائیں۔ زیادہ تر ضمنی Broadcast — جو کسی مختص ایپلیکیشن کے لیے نہیں ہے — مستقل رجسٹریشن کے ساتھ کام نہیں کرتے۔ سیسٹم CONNECTIVITY_ACTION یا ACTION_BATTERY_LOW جیسی اقدامات کے لیے مینیفیسٹ میں رجسٹرڈ ریسیورز کو بلوک کرتا ہے۔
Google نے ان Broadcast کی فہرست مقرر کی ہے جو مستقل رجسٹریشن کے ساتھ کام کرتے رہتے ہیں: BOOT_COMPLETED، TIME_TICK، Alarm اور پیکیج میں تبدیلیاں — مجموعی طور پر تقریبنا ڈزہ مستثنیات۔ باقی تمام ضمنی Broadcast اب Context.registerReceiver کے ذریعے متحرک رجسٹریشن کی ضرورت ہے، جو صرف اس وقت کام کرتا ہے جب ایپ اگرے منزر میں ہو۔
پس منظر کے کاموں کے لیے جو پہلے Broadcast Receiver کے ذریعے سنبھالے جاتے تھے، Android WorkManager (تعمیل کی گارنٹی کے ساتھ موخوفہ کام) ، JobScheduler (ڈائیوس کی حالت کو مدنظر رکھتے ہوئے متوقت کام) اور NotificationListenerService (اطلاعات کی نگرانی) کی سفارش کرتا ہے۔ یہ اجزائے Android 8 کی پابندیوں کے بغیر کام کرتے ہیں اور بجلی کی کھپت کے لیے بہتر بنائے گئے ہیں۔
آئیے نیٹ ورک کنیکٹویٹی کی نگرانی کے لیے ایک Broadcast Receiver بناتے ہیں۔ ریسیور CONNECTIVITY_ACTION Broadcast کو کیپچر کرے گا اور کنیکشن کی قسم کو لاگ کرے گا۔ Android 8+ کے لیے، ہم اسے متحرک طور پر رجسٹر کریں گے کیونکے یہ ایک ضمنی Broadcast ہے جو مستقل رجسٹریشن سے خارج ہے۔
// نیٹ ورک کی حالت کے ٹریکینگ کے لیے Broadcast Receiver
class NetworkReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val network = cm.activeNetwork
val caps = cm.getNetworkCapabilities(network)
val connectionType = when {
caps?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true -> "WiFi"
caps?.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) == true -> "Cellular"
else -> "Disconnected"
}
Log.d("NetworkReceiver", "کنیکشن کی قسم: $connectionType")
}
}
// Activity میں متحرک رجسٹریشن
class MainActivity : AppCompatActivity() {
private val networkReceiver = NetworkReceiver()
override fun onStart() {
super.onStart()
val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
registerReceiver(networkReceiver, filter)
}
override fun onStop() {
super.onStop()
unregisterReceiver(networkReceiver)
}
}
ہمیشہ onStop میں ریسیور کا اندراج منسوخ کریں — اگر Activity پس منزر میں چلی جاتی ہے لیکن ریسیور رجسٹرڀ رہتا ہے، سیسٹم وسائل آزاد نہیں کر سکتا۔ Service کے لیے، onDestroy استعمال کریں۔ Fragment میں، Fragment کے لائف سایکل کی پیروی کرتے ہوئے، onStart میں ریسیور کو رجسٹر کریں اور onStop میں اندراج منسوخ کریں۔
اکثر پوچے جانے والے سوالات
Broadcast Receiver سیسٹم اور کسٹم Broadcast پیغامات کے پروسیسنگ کے لیے ایک Android جزئے ہے۔ یہ onReceive طریقے میں Intent وصول کرتا ہے، جو میئن ایوریئے پر چلتا ہے، اور 10 سیکنڈ کے اندر مکمل ہونا چاہئے۔ طویل کاموں کے لیے، WorkManager یا JobScheduler استعمال کریں۔
Normal Broadcast تمام ریسیورز کو غیر متزامن اور متوازی طور پر پہنچایا جاتا ہے — ترتیب گارنٹی نہیں، abortBroadcast کام نہیں کرتا۔ Ordered Broadcast اولیئیٹ کے مطابق مسلسل طور پر پہنچایا جاتا ہے، ہر ریسیور زنجیر کو منقطع کر سکتا ہے یا setResultExtras کے ذریعے اگلے کو ڈیٹا بھیج سکتا ہے۔
مستقل رجسٹریشن (مینیفیسٹ میں) ریسیور کو اس وقت بھی کام کرنے دیتا ہے جب ایپلیکیشن نہیں چل رہا ہو۔ متحرک رجسٹریشن (registerReceiver کے ذریعے) صرف اس وقت کام کرتا ہے جب رجسٹر کرنے والا جزئے فعال ہو۔ Android 8 سے شروع کرکے، بہت سے ضمنی Broadcast کو متحرک رجسٹریشن کی ضرورت ہے۔
Android 8 (API 26) نے زیادہ تر ضمنی Broadcast جیسے CONNECTIVITY_ACTION یا ACTION_BATTERY_LOW کے لیے مستقل رجسٹریشن پر پابندی لگا دی۔ مستثنیات میں BOOT_COMPLETED، Alarm، وقت اور کچھ اور شامل ہیں۔ پس منظر کے کاموں کے لیے، Broadcast کے بجائے WorkManager استعمال کریں۔
onReceive سے UI میں ڈیٹا بھیجنے کے لیے LiveData، StateFlow، EventBus یا LocalBroadcastManager استعمال کریں۔ onReceive سے براہ راست UI اپڈیٹ کرنے کی کوشش نہ کریں — یہ میئن ایوریئے پر چلتا ہے، لیکن ریسیور اس بات کی گارنٹی نہیں دیتا کہ Activity نظر آ رہی ہے۔ LocalBroadcastManager اندرونی مواصلات کے لیے ایک منسوخ اختیار ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں