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

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

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

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

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

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

Kotlin

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

Java

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 ऑब्जेक्ट, नेटवर्क की मौजूदा क्षमताओं के बारे में जानकारी देता है.

Kotlin

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)
    }
}

Java

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 का एलान करने के बाद, requestNetwork() या registerNetworkCallback() फ़ंक्शन का इस्तेमाल करके, NetworkRequest पर काम करने वाले डिवाइस से कनेक्ट करने के लिए नेटवर्क खोजें. इसके बाद, NetworkCallback को इसकी सूचना दी जाती है.

Kotlin

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

Java

ConnectivityManager connectivityManager =
        (ConnectivityManager) getSystemService(ConnectivityManager.class);
connectivityManager.requestNetwork(networkRequest, networkCallback);