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

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