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

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