Connectivity Manager ایک Android نظام خدمت ہے جو ایپلیکیشنز کو ڈیوائس کے نیٹورک کنیکشن کی حالت کے بارے میں معلومات فراہم کرتا ہے۔ یہ انٹرنیٹ کی دستیابی کی جانچ، نیٹورک کی قسم (Wi-Fi، موبائل ڈیٹا، Ethernet) کا تعین، کنیکشن میں تبدیلیوں کو ٹریک کرنا اور کنیکشن کے معیار کی بنیاد پر نیٹورک درخواستوں کا انتظام کرنے کی اجازت دیتا ہے۔ Android Developers، 2025 کے مطابق، ConnectivityManager نیٹورک مونٹرنگ کے لئے اہم API ہے اور API Level 1 سے Android Framework کا حصہ ہے۔
اہم نکات
ConnectivityManager Android آپریٹنگ سسٹم کا ایک نظام خدمت ہے، جو Context.getSystemService(Context.CONNECTIVITY_SERVICE) کے ذریعے رسائی حاصل ہے۔ یہ ڈیوائس کی نیٹورک کنیکشن کے بارے میں معلومات حاصل کرنے، نیٹورک تبدیلیوں کی نگرانی کرنے اور ایپلیکیشن کی نیٹورک درخواستوں کا انتظام کرنے کے لئے API فراہم کرتا ہے۔ Connectivity Manager پلیٹ فارم کے پہلے ورژن (API Level 1) سے Android Framework کا حصہ رہا ہے اور کئی دہائیوں میں سادہ getActiveNetworkInfo() سے NetworkCallback اور NetworkRequest کے ساتھ جدید ری ایکٹو ماڈل تک اہم تبدیلیوں سے گزرا ہے۔
Connectivity Manager کی اہم صلاحیتوں میں شامل ہیں: ایک فعال نیٹورک کنیکشن کی موجودگی کی جانچ، نیٹورک کی قسم (Wi-Fi، موبائل ڈیٹا، Ethernet، Bluetooth، VPN) کا تعین، حقیقی وقت میں نیٹورک کی حالت میں تبدیلیوں کی نگرانی، بینڈ چوڑائی اور تاخیر کے بارے میں معلومات حاصل کرنا، اور ایپلیکیشن کی نیٹورک درخواستوں کا انتظام۔ ConnectivityManager Offline-First آرکیٹیکچر، اضافی مواد کی لوڈنگ اور کنیکشن کے معیار کی بنیاد پر ایپلیکیشن کی بہترین کارکردگی کے نفاذ کے لئے WorkManager اور Repository کے ساتھ استعمال ہوتا ہے۔
Android 10 (API 29) سے شروع کرتے ہوئے، Google نے ConnectivityManager کے ساتھ کام کرنے کے طریقے میں تبدیلی کی۔ getActiveNetworkInfo() طریقے کو فرسودہ قرار دیا گیا ہے، اور اس کے بجائے NetworkRequest کے ساتھ registerDefaultNetworkCallback() یا registerNetworkCallback() استعمال کرنے کی سفارش کی جاتی ہے۔ نیا API مختصر پورٹلز (مصدقہ کے ساتھ Wi-Fi) کا پتہ لگانا اور کنیکشن کے معیار کا جائزہ شامل کرتے ہوئے مزید مفصل نیٹورک معلومات فراہم کرتا ہے۔ ConnectivityManager Jetpack خاندان کے ساتھ بھی مربوط ہے: ConnectivityManager لائبریری 2024 میں Compose ایپلیکیشنز میں نیٹورک مونٹرنگ کو آسان بنانے کے لئے Jetpack کے حصے کے طور پر جاری کی گئی تھی۔
جدید Android آرکیٹیکچر میں، Connectivity Manager نیٹورک درخواستوں کے بارے میں فیصلے کرنے کے لئے ذخیرہ یا UseCase سطح پر استعمال ہوتا ہے۔ API کو کال کرنے سے پہلے نیٹورک کی حالت کی جانچ کرتی ہے: اگر نیٹورک دستیاب نہیں ہے، تو مقامی ذخیرہ (Room) سے ڈیٹا واپس کیا جاتا ہے۔ اگر نیٹورک دستیاب ہے، تو سرور کو ایک درخواست کی جاتی ہے اور نتیجہ Room میں محفوظ کیا جاتا ہے۔ ViewModel Room سے Flow کی رکنیت کرتا ہے اور نیٹورک کے تعامل کی تفصیلات نہیں جانتا — یہ ہر پرت کو آزادانہ پرکھنے کی اجازت دیتا ہے۔
Connectivity Manager نیٹورک کی حالت کی معلومات connectivity نظام خدمت سے حاصل کرتا ہے، جو Linux کرنل کے نیٹورک انٹرفیسز کے ساتھ بات چیت کرتی ہے۔ جب ڈیوائس Wi-Fi سے منسلک ہوتی ہے یا موبائل ڈیٹا چالو کرتی ہے، کرنل نظام خدمت کو مطلع کرتا ہے، جو اپنی اندرونی حالت کو اپ ڈیٹ کرتی ہے اور تمام رجسٹرڈ کال بیکس کو مطلع کرتی ہے۔ ConnectivityManager کی آرکیٹیکچر Observer پیٹرن پر مبنی ہے: ایپلیکیشن ایک NetworkCallback رجسٹر کرتی ہے اور نیٹورک میں کسی بھی تبدیلی — کنیکشن قائم کرنا، کنیکشن کا خاتمہ، نیٹورک کی قسم میں تبدیلی یا معیار میں گراوٹ — کے بارے میں اطلاعات وصول کرتی ہے۔
جدید ConnectivityManager API نیٹورک واقعات کو فلٹر کرنے کے لئے NetworkRequest استعمال کرتی ہے۔ NetworkRequest نیٹورک کے لئے ضروریات متعین کرنے کی اجازت دیتا ہے: ٹرانسپورٹ (Transport.WIFI، Transport.CELLULAR، Transport.ETHERNET)، انٹرنیٹ کی صلاحیت (NetworkCapabilities.NET_CAPABILITY_INTERNET) اور دیگر معیار۔ اگر کسی ایپلیکیشن کو بڑی فائلیں ڈاؤن لوڈ کرنے کے لئے صرف Wi-Fi کی ضرورت ہے، تو یہ Transport.WIFI کے ساتھ ایک NetworkRequest تشکیل کرتی ہے اور ایک کال بیک رجسٹر کرتی ہے۔ نظام موبائل نیٹورک واقعات کو نظرانداز کرتے ہوئے صرف اس وقت ایپلیکیشن کو مطلع کرے گا جب Wi-Fi کنیکشن میں تبدیلی ہو۔
Android 12+ پر Connectivity Manager کی ایک اہم خصوصیت صلاحیت پر مبنی نیٹورکنگ ہے۔ ایپلیکیشن صرف “کیا انٹرنیٹ ہے؟” کی جانچ نہیں کرتی، بلکہ یہ اندازہ لگا سکتی ہے کہ کس قسم کا ٹریفک دستیاب ہے۔ مثال کے طور پر، NET_CAPABILITY_NOT_METERED ایک لامحدود کنیکشن (Wi-Fi) کو ظاہر کرتا ہے، NET_CAPABILITY_NOT_ROAMING ظاہر کرتا ہے کہ ڈیوائس رومنگ میں نہیں ہے۔ یہ فیصلے کرنے کی اجازت دیتا ہے: صرف Wi-Fi پر ویڈیو ڈاؤن لوڈ کریں، رومنگ میں مطابقت ملتوی کریں، یا صرف اہم درخواستوں کے لئے موبائل ڈیٹا استعمال کریں۔
| API Level | تجویز شدہ طریقہ | حالت |
|---|---|---|
| 1-22 | getActiveNetworkInfo() | فرسودہ |
| 21+ | NetworkCallback + registerNetworkCallback() | تجویز شدہ |
| 24+ | registerDefaultNetworkCallback() | تجویز شدہ |
| 28+ | getActiveNetwork() + NetworkCapabilities | متبادل |
| 31+ | registerBestMatchingNetworkCallback() | نیا API |
Android ایپلیکیشن میں Connectivity Manager استعمال کرنے کے لئے اختیارات درکار ہیں۔ ACCESS_NETWORK_STATE نیٹورک معلومات پڑھنے کے لئے ایک لازمی اختیار ہے، جو AndroidManifest.xml میں مقرر کیا جاتا ہے۔ اس اختیار کے بغیر، ConnectivityManager getActiveNetwork() کے لئے null واپس کرے گا اور کال بیکس کو نہیں بلائے گا۔ نیٹورک کارروائی کرنے کے لئے INTERNET اختیار بھی درکار ہے۔ Android 10 (API 29) سے شروع کرتے ہوئے، ایپلیکیشن بغیر کسی اضافی رن ٹائم اختیارات کے نیٹورک کی حالت چیک کر سکتی ہے — ACCESS_NETWORK_STATE ایک عام اختیار ہے اور تنصیب کے دوران خودکار عطا کیا جاتا ہے۔
جدید Connectivity Manager نیٹورک کے ساتھ کام کرنے کے لئے کئی اہم طریقے فراہم کرتا ہے۔ getActiveNetwork() (API 23+) موجودہ فعال نیٹورک کا Network آبجیکٹ واپس کرتا ہے یا اگر ڈیوائس منسلک نہیں ہے تو null واپس کرتا ہے۔ اس طریقے کو کال بیکس کی ضرورت نہیں ہے اور یہ ایک مرتبہ جانچ کے لئے موزوں ہے۔ Network آبجیکٹ کو مفصل معلومات حاصل کرنے کے لئے NetworkCapabilities میں پاس کیا جا سکتا ہے: ٹرانسپورٹ کی قسم، میٹرڈ حالت، رومنگ، انٹرنیٹ کی صلاحیت اور دیگر خصوصیات۔
registerDefaultNetworkCallback() (API 24+) نیٹورک کی نگرانی کا ترجیحی طریقہ ہے۔ ایپلیکیشن ایک کال بیک رجسٹر کرتی ہے جو پہلے سے طے کردہ نیٹورک (وہ نیٹورک جس کے ذریعے ایپلیکیشن ٹریفک بھیجتی ہے) میں کسی بھی تبدیلی پر بلایا جاتا ہے۔ کال بیک ایک Network آبجیکٹ حاصل کرتا ہے جو ساکٹس اور HTTP کلائنٹس کو بائنڈ کرنے کے لئے استعمال کیا جا سکتا ہے۔ یہ طریقہ فرسودہ getActiveNetworkInfo() کی جگہ لے لیتا ہے اور پولنگ کے بغیر ری ایکٹو نیٹورک مونٹرنگ فراہم کرتا ہے۔
registerNetworkCallback() (API 21+) NetworkRequest کے ذریعے ایک مخصوص نیٹورک قسم میں تبدیلیوں کی رکنیت کی اجازت دیتا ہے۔ مثال کے طور پر، ایک ایپلیکیشن new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build() استعمال کرکے صرف Wi-Fi نیٹورکس کو ٹریک کر سکتی ہے۔ نظام موبائل نیٹورک واقعات کو متاثر کئے بغیر Wi-Fi کنیکشن/منقطع کے بارے میں ایپلیکیشن کو مطلع کرے گا۔ NetworkCapabilities.getLinkDownstreamBandwidthKbps() نیچے کی جانب بینڈ چوڑائی کا اندازہ kbit/s میں واپس کرتا ہے، جو کنیکشن کی رفتار کے مطابق مواد کے معیار کو اپ ڈیٹ کرنے کی اجازت دیتا ہے۔
| طریقہ | کم سے کم API | مقصد |
|---|---|---|
| getActiveNetwork() | 23 | موجودہ فعال نیٹورک حاصل کرنا |
| getNetworkCapabilities() | 21 | نیٹورک صلاحیتیں حاصل کرنا (قسم، میٹرڈ، رومنگ) |
| registerDefaultNetworkCallback() | 24 | پہلے سے طے کردہ نیٹورک کی نگرانی |
| registerNetworkCallback() | 21 | NetworkRequest فلٹر کے ذریعے نیٹورک کی نگرانی |
| unregisterNetworkCallback() | 21 | کال بیک کا رجسٹریشن منسوخ کرنا |
| getActiveNetworkInfo() | 1 | فرسودہ، استعمال نہ کریں |
Jetpack Connectivity لائبریری (androidx.core:core-ktx) Compose میں ConnectivityManager کے ساتھ کام کرنے کے لئے آسان توسیعات فراہم کرتی ہے۔ ConnectivityManager.observeAsState() فنکشن ایک State
ConnectivityManager.NetworkCallback ایک تجریدی کلاس ہے جس میں طریقے ہیں جو نیٹورک کی حالت بدلنے پر نظام کے ذریعے بلائے جاتے ہیں۔ onAvailable(Network) — تب بلایا جاتا ہے جب ایک نیٹورک دستیاب ہو جاتا ہے۔ ایپلیکیشن ایک Network آبجیکٹ حاصل کرتی ہے جو Network.bindSocket() کے ذریعے ساکٹ بائنڈ کرنے کے لئے استعمال کیا جا سکتا ہے۔ onLost(Network) — تب بلایا جاتا ہے جب ایک نیٹورک دستیاب نہیں رہتا۔ ایپلیکیشن کو مقامی ڈیٹا پر سوئچ کرنا چاہئے یا کنیکشن نہ ہونے کا پیغام دکھانا چاہئے۔ onCapabilitiesChanged(Network, NetworkCapabilities) — تب بلایا جاتا ہے جب نیٹورک کی خصوصیات بدلتی ہیں (مثال کے طور پر، Wi-Fi سے موبائل ڈیٹا پر سوئچ کرتے وقت)۔
نیٹورک تبدیلیوں کے صحیح انتظام کے لئے جز کی زندگی کے چکر پر غور کرنا ضروری ہے۔ کال بیک onStart()/onResume() میں رجسٹر اور onStop()/onPause() میں منسوخ کرنا چاہئے۔ اگر کال بیک منسوخ نہیں کیا جاتا، تو یہ Activity کے تباہ ہونے کے بعد بھی چلتا رہ سکتا ہے، جس سے میموری لیک اور ممکنہ NullPointerException ہو سکتا ہے جب کال بیک تباہ شدہ جز کی یوزر انٹرفیس کو اپ ڈیٹ کرنے کی کوشش کرتا ہے۔ خودکار رجسٹریشن انتظام کے لئے lifecycleScope یا repeatOnLifecycle استعمال کریں۔ Jetpack Compose میں، کال بیک رجسٹر اور منسوخ کرنے کے لئے DisposableEffect استعمال کریں۔
مختصر پورٹل کا انتظام Android 10 سے شروع ہونے والی ConnectivityManager کی ایک اہم خصوصیت ہے۔ CAPTIVE_PORTAL ایک منظرنامہ ہے جہاں Wi-Fi نیٹورک دستیاب ہے لیکن ایک ویب صفحہ کے ذریعے مصدقہ کی ضرورت ہے (ہوائی اڈے، ہوٹل، کیفے)۔ NetworkCapabilities.NET_CAPABILITY_VALIDATED ظاہر کرتا ہے کہ نیٹورک کے پاس مکمل انٹرنیٹ رسائی ہے۔ اگر NET_CAPABILITY_VALIDATED غائب ہے، ایپلیکیشن مختصر پورٹل مصدقہ کے لئے براؤزر کھول سکتی ہے۔ Android 11 (API 30) میں شامل کیا گیا isCaptivePortal() طریقہ مختصر پورٹلز کا پتہ لگانے کے لئے استعمال ہوتا ہے۔
ConnectivityManager مخصوص مقاصد کے لئے نیٹورک کی درخواست کرنے کی اجازت دیتا ہے۔ مثال کے طور پر، بڑی فائلیں ڈاؤن لوڈ کرنے والی ایپلیکیشن موبائل ڈیٹا فعال ہونے پر بھی Wi-Fi نیٹورک کی درخواست کر سکتی ہے۔ اس کے لئے addTransportType(TRANSPORT_WIFI) کے ساتھ NetworkRequest تشکیل کیا جاتا ہے، اور جب Wi-Fi دستیاب ہوتا ہے، نظام onAvailable() کو بلاتا ہے۔ ایپلیکیشن network.bindSocket() یا تشکیل شدہ Network آبجیکٹ کے ساتھ OkHttp کے ذریعے اس نیٹورک سے ساکٹ بائنڈ کرتی ہے۔ یہ نیٹورک انٹرفیسز کے استعمال پر لچکدار کنٹرول فراہم کرتا ہے۔
Clean Architecture میں جدید API (NetworkCallback) کے ساتھ ConnectivityManager استعمال کی ایک مکمل مثال دیکھتے ہیں۔ NetworkMonitor ConnectivityManager کے گرد ایک ریپر کلاس ہے جو StateFlow کے ذریعے ری ایکٹو نیٹورک حالت فراہم کرتی ہے۔ ViewModel اس Flow کی رکنیت کرتا ہے اور حالت یوزر انٹرفیس کو منتقل کرتا ہے۔ Repository نیٹورک درخواستوں کے بارے میں فیصلے کرنے کے لئے NetworkMonitor استعمال کرتا ہے۔ یہ نقطہ نظر پرکھنے کی صلاحیت اور پلیٹ فارم انحصار کی علیحدگی کو یقینی بناتا ہے۔
نیچے دی گئی مثال ظاہر کرتی ہے کہ registerDefaultNetworkCallback کے ساتھ ConnectivityManager کو صحیح طریقے سے کیسے استعمال کیا جائے۔ NetworkMonitor کلاس نظام خدمت کے ساتھ کام کو encapsulate کرتی ہے اور ایک صاف Kotlin Flow
class NetworkMonitor(
private val connectivityManager: ConnectivityManager
) {
val isOnline: StateFlow<Boolean> = callbackFlow {
val callback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
trySend(true)
}
override fun onLost(network: Network) {
trySend(false)
}
override fun onCapabilitiesChanged(
network: Network,
caps: NetworkCapabilities
) {
val connected = caps.hasCapability(
NetworkCapabilities.NET_CAPABILITY_INTERNET
)
trySend(connected)
}
}
connectivityManager.registerDefaultNetworkCallback(callback)
awaitClose {
connectivityManager.unregisterNetworkCallback(callback)
}
}.stateIn(
CoroutineScope(Dispatchers.Default),
SharingStarted.WhileSubscribed(5000),
initialValue = checkInitialState()
)
private fun checkInitialState(): Boolean {
val network = connectivityManager.getActiveNetwork() ?: return false
val caps = connectivityManager.getNetworkCapabilities(network) ?: return false
return caps.hasCapability(
NetworkCapabilities.NET_CAPABILITY_INTERNET
)
}
}
ViewModel stateIn() کے ذریعے NetworkMonitor.isOnline کی رکنیت کرتا ہے اور حالت Compose کو منتقل کرتا ہے۔ Repository API کو کال کرنے سے پہلے موجودہ isOnline.value کی جانچ کرتا ہے: اگر false — Room سے Flow واپس کرتا ہے۔ اگر true — API کال کرتا ہے، نتیجہ Room میں محفوظ کرتا ہے اور Room سے Flow واپس کرتا ہے۔ WorkManager پس منظر کے کاموں کو محدود کرنے کے لئے NetworkType.CONNECTED استعمال کرتا ہے۔ NetworkMonitor کی پرکھ mock ConnectivityManager آبجیکٹ اور fake NetworkCallback کے ساتھ کی جاتی ہے، جو یونٹ پرکھوں میں کسی بھی نیٹورک منظرنامے کی نقل کرنے کی اجازت دیتی ہے۔
ConnectivityManager کے ساتھ کام کرنے کا پہلا اصول فرسودہ API استعمال نہ کرنا ہے۔ getActiveNetworkInfo() API 29 سے فرسودہ ہے اور نئے Android ورژنز پر غلط ڈیٹا واپس کر سکتا ہے۔ اس کے بجائے، ایک مرتبہ جانچ کے لئے getActiveNetwork() + getNetworkCapabilities() اور مسلسل نگرانی کے لئے registerDefaultNetworkCallback() استعمال کریں۔ پرانا طریقہ مختصر پورٹل والے نیٹورک اور مکمل انٹرنیٹ والے نیٹورک میں فرق نہیں کرتا، جس سے غلط مثبت نتائج آتے ہیں۔
دوسرا اصول ہے ہمیشہ کال بیک کا رجسٹریشن منسوخ کریں۔ اگر کوئی Activity onStart() میں NetworkCallback رجسٹر کرتی ہے لیکن onStop() میں منسوخ نہیں کرتی، کال بیک Activity کے تباہ ہونے کے بعد بھی چلتا رہتا ہے۔ اس سے میموری لیک اور ممکنہ NullPointerException ہوتی ہے جب کال بیک تباہ شدہ جز کی یوزر انٹرفیس کو اپ ڈیٹ کرنے کی کوشش کرتا ہے۔ خودکار رجسٹریشن انتظام کے لئے lifecycleScope یا repeatOnLifecycle استعمال کریں۔ Jetpack Compose میں، کال بیک رجسٹر اور منسوخ کرنے کے لئے DisposableEffect استعمال کریں۔
تیسری عام غلطی معیار پر غور کئے بغیر صرف نیٹورک کی دستیابی کی جانچ کرنا ہے۔ ایک سادہ “کیا انٹرنیٹ ہے؟” فیصلہ کرنے کے لئے کافی نہیں ہے۔ ایپلیکیشن کو بڑی فائلیں ڈاؤن لوڈ کرنے کے لئے NET_CAPABILITY_NOT_METERED، پس منظر میں مطابقت کے لئے NET_CAPABILITY_NOT_ROAMING اور انٹرنیٹ رسائی کی تصدیق کے لئے NET_CAPABILITY_VALIDATED چیک کرنا چاہئے۔ ان جھنڈیوں کو نظرانداز کرنا ایپلیکیشن کو رومنگ میں ویڈیو ڈاؤن لوڈ کرنے یا ہوٹل کے مختصر پورٹل کے ذریعے ڈیٹا مطابقت کرنے کی کوشش کرنے پر مجبور کرتا ہے۔
چوتھا اصول کسی مخصوص سرور کی دستیابی جانچنے کے لئے ConnectivityManager استعمال نہ کرنا ہے۔ ConnectivityManager ڈیوائس پر نیٹورک کی حالت رپورٹ کرتا ہے، لیکن ضمانت نہیں دیتا کہ سرور قابل رسائی ہے۔ API کی دستیابی جانچنے کے لئے مختصر ٹائم آؤٹ والی HTTP درخواست یا Health Check استعمال کریں۔ ConnectivityManager + HTTP ping ایک قابل اعتماد مجموعہ ہے: پہلے نیٹورک کی موجودگی چیک کریں، پھر حقیقی رسائی کی تصدیق کے لئے سرور کو ہلکی درخواست بھیجیں۔
یونٹ پرکھوں کے لئے، Robolectric استعمال کریں ShadowConnectivityManager کے ساتھ، جو نیٹورک حالتوں کی نقل کرنے کی اجازت دیتا ہے۔ انضمام پرکھوں کے لئے — Android Test Orchestrator ہوائی جہاز موڈ تبدیل کرنے کے ساتھ۔ پرکھوں میں منظرنامے تصدیق کریں: آن لائن سے آف لائن میں منتقلی، موبائل ڈیٹا فعال ہونے پر Wi-Fi کا ظاہر ہونا، درخواست کے دوران نیٹورک کا کھو جانا، مختصر پورٹل، رومنگ۔ یونٹ پرکھوں میں نقلی کے لئے، ایک ریپر انٹرفیس (مثلاً NetworkMonitorInterface) استعمال کریں جسے پلیٹ فارم انحصار کے بغیر mock آبجیکٹ سے بدلا جا سکے۔
اکثر پوچھے گئے سوالات
جدید طریقہ onCapabilitiesChanged() میں NET_CAPABILITY_INTERNET چیک کے ساتھ registerDefaultNetworkCallback() استعمال کرنا ہے۔ ایک مرتبہ جانچ کے لئے: connectivityManager.getActiveNetwork()?.let { caps -> caps.hasCapability(NET_CAPABILITY_INTERNET) } ?: false۔ فرسودہ getActiveNetworkInfo() طریقہ API 29+ سے سفارش نہیں کی جاتی۔
نیٹورک معلومات پڑھنے کے لئے android.permission.ACCESS_NETWORK_STATE اختیار درکار ہے۔ یہ ایک عام اختیار ہے — یہ ایپلیکیشن تنصیب پر خودکار عطا کیا جاتا ہے اور رن ٹائم درخواست کی ضرورت نہیں ہے۔ نیٹورک کارروائیاں (HTTP درخواستیں) کرنے کے لئے INTERNET اختیار بھی درکار ہے۔
registerDefaultNetworkCallback() پہلے سے طے کردہ نیٹورک — وہ نیٹورک جس کے ذریعے ایپلیکیشن اپنا اہم ٹریفک بھیجتی ہے — کی نگرانی کرتا ہے۔ registerNetworkCallback(NetworkRequest) دیے گئے فلٹر (مثلاً صرف Wi-Fi) سے匹配 ہونے والے نیٹورکس کی نگرانی کرتا ہے۔ پہلے سے طے کردہ کال بیک آسان ہے اور 90% منظرناموں کا احاطہ کرتا ہے، جبکہ حسب ضرورت درخواست مخصوص نیٹورک قسم کی ضروریات کے لئے ہے۔
NetworkCapabilities استعمال کریں: Wi-Fi کے لئے caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)، موبائل ڈیٹا کے لئے hasTransport(TRANSPORT_CELLULAR)۔ ConnectivityManager.getActiveNetworkInfo().getType() استعمال نہ کریں — یہ طریقہ فرسودہ ہے۔ NetworkCapabilities connectivityManager.getNetworkCapabilities(network) کے ذریعے دستیاب ہے۔
getActiveNetworkInfo() عدم درستی کی وجہ سے فرسودہ ہے: یہ مختصر پورٹل والے نیٹورک اور مکمل انٹرنیٹ والے نیٹورک میں فرق نہیں کرتا، اور بینڈ چوڑائی یا رومنگ کی معلومات فراہم نہیں کرتا۔ Android 10 سے شروع کرتے ہوئے، یہ طریقہ ملٹی نیٹورک کنیکشنز کے لئے null یا غلط ڈیٹا واپس کر سکتا ہے۔ متبادل getActiveNetwork() + NetworkCapabilities ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں