कनेक्टिविटी की स्थिति और कनेक्शन मीटरिंग को मॉनिटर करें

ConnectivityManager एक एपीआई उपलब्ध कराता है. इसकी मदद से, डिवाइस को किसी नेटवर्क से कनेक्ट करने का अनुरोध किया जा सकता है. यह अनुरोध, डिवाइस की क्षमताओं और डेटा ट्रांसफ़र करने के विकल्पों के आधार पर किया जा सकता है.

कॉलबैक लागू करने से, आपके ऐप्लिकेशन को डिवाइस के कनेक्शन की स्थिति के साथ-साथ, कनेक्ट किए गए मौजूदा नेटवर्क की सुविधाओं के बारे में जानकारी मिलती है. एपीआई की मदद से यह पता लगाया जा सकता है कि डिवाइस फ़िलहाल किसी ऐसे नेटवर्क से कनेक्ट है या नहीं जो आपके ऐप्लिकेशन की ज़रूरी शर्तों को पूरा करता है.

नेटवर्क का अनुरोध कॉन्फ़िगर करना

नेटवर्क के ट्रांसपोर्ट टाइप, जैसे कि वाई-फ़ाई या मोबाइल इंटरनेट कनेक्शन और फ़िलहाल कनेक्ट किए गए नेटवर्क की क्षमताओं, जैसे कि इंटरनेट कनेक्शन की जानकारी देने के लिए, आपको नेटवर्क का अनुरोध कॉन्फ़िगर करना होगा.

NetworkRequest का एलान करें, जो आपके ऐप्लिकेशन के लिए इंटरनेट कनेक्शन की ज़रूरतों के बारे में बताता हो. यहां दिया गया कोड, इंटरनेट से कनेक्ट किए गए नेटवर्क के लिए अनुरोध करता है. साथ ही, ट्रांसपोर्ट टाइप के लिए वाई-फ़ाई, ईथरनेट या मोबाइल इंटरनेट कनेक्शन का इस्तेमाल करता है.

private val networkRequest = NetworkRequest.Builder()
    .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
    .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
    .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
    .build()

ध्यान दें कि कुछ कनेक्शन, अन्य कनेक्शन की तुलना में काफ़ी महंगे हो सकते हैं. उदाहरण के लिए, मोबाइल कनेक्शन आम तौर पर महंगा होता है. NetworkCapabilities#NET_CAPABILITY_NOT_METERED का इस्तेमाल करके पता लगाएं कि कनेक्शन महंगा है या नहीं. सीमित डेटा वाले कनेक्शन का इस्तेमाल करते समय, अपने ऐप्लिकेशन के डेटा खर्च को कम करने की कोशिश करें या असीमित डेटा वाले कनेक्शन से कनेक्ट होने तक इंतज़ार करें.

नेटवर्क कॉलबैक कॉन्फ़िगर करना

ConnectivityManager के साथ NetworkRequest को रजिस्टर करते समय, आपको NetworkCallback को लागू करना होगा. इससे आपको कनेक्शन की स्थिति और नेटवर्क की क्षमताओं में होने वाले बदलावों की सूचनाएं मिलेंगी.

NetworkCallback में सबसे ज़्यादा इस्तेमाल किए जाने वाले फ़ंक्शन ये हैं:

  • onAvailable() इससे पता चलता है कि डिवाइस किसी ऐसे नए नेटवर्क से कनेक्ट है जो NetworkRequest में बताई गई, क्षमताओं और ट्रांसपोर्ट टाइप की ज़रूरी शर्तों को पूरा करता है.
  • onLost() इससे पता चलता है कि डिवाइस का नेटवर्क कनेक्शन टूट गया है.
  • onCapabilitiesChanged() इससे पता चलता है कि नेटवर्क की क्षमताओं में बदलाव हुआ है. NetworkCapabilities ऑब्जेक्ट, नेटवर्क की मौजूदा क्षमताओं के बारे में जानकारी देता है.

private val networkCallback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        // Network is available for use.
    }

    // Network capabilities have changed for the network.
    override fun onCapabilitiesChanged(
        network: Network,
        networkCapabilities: NetworkCapabilities
    ) {
        val unmetered =
            networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
        if (!unmetered) {
            // Reduce data usage, or delay it until the network is unmetered.
        }
    }

    override fun onLost(network: Network) {
        // Lost network connection.
    }
}

नेटवर्क से जुड़े अपडेट पाने के लिए रजिस्टर करना

NetworkRequest और NetworkCallback का एलान करने के बाद, requestNetwork() या registerNetworkCallback() फ़ंक्शन का इस्तेमाल करके, डिवाइस से कनेक्ट करने के लिए ऐसा नेटवर्क खोजें जो NetworkRequest की शर्तों को पूरा करता हो. इसके बाद, स्टेटस की जानकारी NetworkCallback को दी जाती है.

val connectivityManager = getSystemService(ConnectivityManager::class.java)
connectivityManager.registerNetworkCallback(networkRequest, networkCallback)