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

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 का इस्तेमाल करके यह पता लगाएं कि कनेक्शन महंगा है या नहीं. अगर मीटर वाले कनेक्शन का इस्तेमाल किया जा रहा है, तो अपने ऐप्लिकेशन के डेटा इस्तेमाल को कम करने की कोशिश करें. इसके अलावा, इसे तब तक के लिए रोक दें, जब तक डिवाइस में मीटर वाला कनेक्शन न हो.

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

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