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

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

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

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

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

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

Kotlin

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

Java

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

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