ConnectivityManager
एक ऐसा एपीआई उपलब्ध कराता है जिसकी मदद से, डिवाइस को अलग-अलग शर्तों के आधार पर किसी नेटवर्क से कनेक्ट करने का अनुरोध किया जा सकता है. इन शर्तों में, डिवाइस की क्षमताएं और डेटा ट्रांसपोर्ट के विकल्प शामिल हैं.
कॉलबैक लागू करने से, आपके ऐप्लिकेशन को डिवाइस के कनेक्शन स्टेटस के साथ-साथ, फ़िलहाल कनेक्ट किए गए नेटवर्क की क्षमताओं के बारे में जानकारी मिलती है. इस एपीआई की मदद से, यह पता लगाया जा सकता है कि डिवाइस फ़िलहाल ऐसे नेटवर्क से कनेक्ट है या नहीं जो आपके ऐप्लिकेशन की ज़रूरी शर्तों को पूरा करता है.
नेटवर्क अनुरोध कॉन्फ़िगर करना
नेटवर्क के ट्रांसपोर्ट टाइप, जैसे कि वाई-फ़ाई या मोबाइल इंटरनेट कनेक्शन और फ़िलहाल कनेक्ट किए गए नेटवर्क की क्षमताओं, जैसे कि इंटरनेट कनेक्शन की जानकारी देने के लिए, आपको नेटवर्क अनुरोध कॉन्फ़िगर करना होगा.
NetworkRequest
का एलान करें, जिसमें आपके ऐप्लिकेशन के नेटवर्क कनेक्शन की ज़रूरतों के बारे में बताया गया हो. नीचे दिया गया कोड, इंटरनेट से कनेक्ट किए गए नेटवर्क के लिए अनुरोध करता है. साथ ही, ट्रांसपोर्ट टाइप के लिए वाई-फ़ाई या सेल्युलर कनेक्शन का इस्तेमाल करता है.
val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build()
NetworkRequest networkRequest = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build();
ध्यान दें कि कुछ कनेक्शन, अन्य कनेक्शन की तुलना में काफ़ी ज़्यादा महंगे हो सकते हैं. उदाहरण के लिए, मोबाइल कनेक्शन आम तौर पर महंगा होता है. कनेक्शन महंगा है या नहीं, यह पता लगाने के लिए
NetworkCapabilities#NET_CAPABILITY_NOT_METERED
का इस्तेमाल करें. मेज़र किए गए डेटा वाले कनेक्शन का इस्तेमाल करते समय, अपने ऐप्लिकेशन के डेटा खर्च को कम करने की कोशिश करें या तब तक इंतज़ार करें, जब तक डिवाइस पर मेज़र किए गए डेटा वाले कनेक्शन का इस्तेमाल न किया जा रहा हो.
नेटवर्क कॉलबैक कॉन्फ़िगर करना
NetworkRequest
को ConnectivityManager
के साथ रजिस्टर करने पर, आपको कनेक्टिविटी की स्थिति और नेटवर्क की सुविधाओं में होने वाले बदलावों के बारे में सूचनाएं पाने के लिए, NetworkCallback
को लागू करना होगा.
NetworkCallback
में आम तौर पर लागू किए जाने वाले फ़ंक्शन में ये शामिल हैं:
onAvailable()
इससे पता चलता है कि डिवाइस किसी ऐसे नए नेटवर्क से कनेक्ट है जोNetworkRequest
में बताई गई सुविधाओं और ट्रांसपोर्ट टाइप की ज़रूरी शर्तों को पूरा करता है.onLost()
का मतलब है कि डिवाइस का नेटवर्क कनेक्शन टूट गया है.onCapabilitiesChanged()
इससे पता चलता है कि नेटवर्क की सुविधाओं में बदलाव हुआ है.NetworkCapabilities
ऑब्जेक्ट, नेटवर्क की मौजूदा क्षमताओं के बारे में जानकारी देता है.
private val networkCallback = object : ConnectivityManager.NetworkCallback() { // network is available for use override fun onAvailable(network: Network) { super.onAvailable(network) } // Network capabilities have changed for the network override fun onCapabilitiesChanged( network: Network, networkCapabilities: NetworkCapabilities ) { super.onCapabilitiesChanged(network, networkCapabilities) val unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) } // lost network connection override fun onLost(network: Network) { super.onLost(network) } }
private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(@NonNull Network network) { super.onAvailable(network); } @Override public void onLost(@NonNull Network network) { super.onLost(network); } @Override public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) { super.onCapabilitiesChanged(network, networkCapabilities); final boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); } };
नेटवर्क से जुड़े अपडेट पाने के लिए रजिस्टर करना
NetworkRequest
और NetworkCallback
की वैल्यू तय करने के बाद, NetworkRequest
की शर्तें पूरी करने वाले डिवाइस से कनेक्ट करने के लिए, नेटवर्क खोजने के लिए requestNetwork()
या registerNetworkCallback()
फ़ंक्शन का इस्तेमाल करें. इसके बाद, NetworkCallback
को इसकी सूचना दी जाती है.
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager connectivityManager.requestNetwork(networkRequest, networkCallback)
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(ConnectivityManager.class); connectivityManager.requestNetwork(networkRequest, networkCallback);