ConnectivityManager getNetworkInfo (int) पदावनत


144

हालांकि संकलक 23 का उपयोग करना , हालांकि 9 तक वापस समर्थन करने की कोशिश कर रहा है।

getNetworkInfo(int)23 में पदावनत किया गया। सुझाव का उपयोग करना था getAllNetworks()और getNetworkInfo(Network)इसके बजाय। हालाँकि इन दोनों में न्यूनतम 21 एपीआई की आवश्यकता होती है।

क्या कोई ऐसा वर्ग है जिसे हम समर्थन पैकेज में उपयोग कर सकते हैं जो इसके साथ सहायता कर सकता है?

मुझे पता है कि पहले एक समाधान प्रस्तावित किया गया था , हालांकि 9 की मेरी न्यूनतम एपीआई आवश्यकताओं की चुनौती एक समस्या है।


आप रनटाइम पर बिल्ड संस्करण की जांच कर सकते हैं और
stinepike

1
क्या यह अभी भी एक हटाए गए चेतावनी को फेंक देगा?
kyleED

कृपया मेरे कनेक्टिविटीऑब्जर्वर वर्ग को चेक करें जो Android नौगट के नीचे और ऊपर एपीआई विधियों को एन्क्रिप्ट करता है।
JJD

जवाबों:


166

आप उपयोग कर सकते हैं:

getActiveNetworkInfo ();

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) { 
    // connected to the internet
    if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
        // connected to wifi
    } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
        // connected to mobile data
    }
} else {
    // not connected to the internet
}

या एक स्विच मामले में

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) { 
    // connected to the internet
    switch (activeNetwork.getType()) {
        case ConnectivityManager.TYPE_WIFI:
            // connected to wifi
            break;
        case ConnectivityManager.TYPE_MOBILE:
            // connected to mobile data
            break;
        default:
            break;
    }
} else {
    // not connected to the internet
}

1
@ शिरीष हिरवाडे - हाँ प्रसारण प्राप्तकर्ता इस मामले में आवश्यक नहीं है। getActiveNetworkInfo () को अपने तरीके से रखा जा सकता है बशर्ते संदर्भ संदर्भ शामिल हो।
पनीर ब्रेड

1
@ TheIT - हाँ डॉक्टर कहते हैं कि "आपको नेटवर्क ट्रैफ़िक आरंभ करने से पहले हमेशा चेक करना चाहिए () रद्द करना चाहिए"। यह समाधान ट्रैफ़िक आरंभ नहीं कर रहा है और केवल हटाए गए getNetworkInfo () कॉल के लिए एक समाधान प्रदान करता है।
पनीर ब्रेड

7
एंड्रॉइड 9 के रूप में, एसडीके 28 यह अब पदावनत है।
ज़र्बेसा क्रिश्चियन

32
activeNetwork.getType()पदावनत और ConnectivityManager.TYPE_WIFIपदावनत है
गोडविन

7
रिप्लेसमेंट अब हैcm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
tmm1

63

अक्टूबर 2018 तक, स्वीकृत उत्तर को हटा दिया गया है।

getType(), और स्वयं प्रकार, अब एपीआई स्तर 28 में पदावनत हैं। जावदोक से:

कॉल करने के लिए स्विच करना चाहिए NetworkCapabilities # hasTransport इसके बजाय NetworkCapabilities # परिवहन * पार्कों में से एक के साथ

उपयोग करने के लिए NetworkCapabilities, आपको विधि Networkको एक उदाहरण देने की आवश्यकता getNetworkCapabilities()है। उस उदाहरण को प्राप्त करने के लिए आपको कॉल करने की आवश्यकता है getActiveNetwork()जो एपीआई स्तर 23 में जोड़ा गया था।

इसलिए मेरा मानना ​​है कि अब आप वाई-फाई या सेलुलर नेटवर्क से जुड़े हैं या नहीं, यह सुरक्षित तरीके से जांचने का सही तरीका है:

public static boolean isNetworkConnected() {
    final ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (cm != null) {
        if (Build.VERSION.SDK_INT < 23) {
            final NetworkInfo ni = cm.getActiveNetworkInfo();

            if (ni != null) {
                return (ni.isConnected() && (ni.getType() == ConnectivityManager.TYPE_WIFI || ni.getType() == ConnectivityManager.TYPE_MOBILE));
            }
        } else {
            final Network n = cm.getActiveNetwork();

            if (n != null) {
                final NetworkCapabilities nc = cm.getNetworkCapabilities(n);

                return (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI));
            }
        } 
    }

    return false; 
}

आप अन्य प्रकारों के लिए भी जांच TRANSPORTकर सकते हैं, जिन्हें आप यहां पा सकते हैं ।

महत्वपूर्ण नोट: यदि आप वाई-फाई और एक वीपीएन से जुड़े हैं, तो आपकी वर्तमान स्थिति हो सकती है TRANSPORT_VPN, इसलिए आप इसके लिए भी जांच कर सकते हैं।

अपनी AndroidManifest फ़ाइल के लिए निम्नलिखित अनुमति जोड़ना न भूलें:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

क्या ट्रान्सपोर्ट (NetworkCapabilities.TRANSPORT_WIFI) ni.isConnected () && (ni.getType () == ConnectivityManager.TYPE_WIFI) के बराबर है? मेरा मतलब है कि है ट्रान्सपोर्ट () फ़ंक्शन यह भी जांचता है कि डिवाइस कनेक्ट है या कनेक्ट करने की कोशिश कर रहा है?
बिस्किट

एक बार फिर, NetworkInfoमूल्यह्रास हो गया है, तो आप अब उपयोग नहीं कर सकते हैं NetWorkInfo, तो यह कैसे एक विकल्प प्रदान करता है?
प्रेस्कॉट चार्टियर

@PrescottChartier इस कोड स्निपेट को केवल SDK <23 उपकरणों पर NetworkInfo एक्सेस करता है
टॉम

59

फरवरी 2020 अपडेट:

स्वीकृत उत्तर को फिर से पदावनत कर दिया जाता है 28 (Android P), लेकिन इसकी प्रतिस्थापन विधि केवल काम करती है 23 (Android M)। पुराने उपकरणों का समर्थन करने के लिए, मैंने एक सहायक कार्य लिखा।

कैसे इस्तेमाल करे:

int type = getConnectionType(getApplicationContext());

यह एक रिटर्न देता है int, आप इसे enumअपने कोड में बदल सकते हैं :

0: कोई इंटरनेट उपलब्ध नहीं है (शायद हवाई जहाज मोड पर, या वाई-फाई में शामिल होने की प्रक्रिया में)।

1: सेलुलर (मोबाइल डेटा, 3 जी / 4 जी / एलटीई जो भी हो)।

2: वाई-फाई।

3: वीपीएन

आप सहायक फ़ंक्शन के कोटलिन या जावा संस्करण को कॉपी कर सकते हैं।

Kotlin:

@IntRange(from = 0, to = 3)
fun getConnectionType(context: Context): Int {
    var result = 0 // Returns connection type. 0: none; 1: mobile data; 2: wifi
    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        cm?.run {
            cm.getNetworkCapabilities(cm.activeNetwork)?.run {
                if (hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                    result = 2
                } else if (hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                    result = 1
                } else if (hasTransport(NetworkCapabilities.TRANSPORT_VPN)){
                    result = 3
                }
            }
        }
    } else {
        cm?.run {
            cm.activeNetworkInfo?.run {
                if (type == ConnectivityManager.TYPE_WIFI) {
                    result = 2
                } else if (type == ConnectivityManager.TYPE_MOBILE) {
                    result = 1
                } else if(type == ConnectivityManager.TYPE_VPN) {
                    result = 3
                }
            }
        }
    }
    return result
}

जावा:

@IntRange(from = 0, to = 3)
public static int getConnectionType(Context context) {
    int result = 0; // Returns connection type. 0: none; 1: mobile data; 2: wifi
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (cm != null) {
            NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
            if (capabilities != null) {
                if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                    result = 2;
                } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                    result = 1;
                } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {
                    result = 3;
                }
            }
        }
    } else {
        if (cm != null) {
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            if (activeNetwork != null) {
                // connected to the internet
                if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                    result = 2;
                } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
                    result = 1;
                } else if (activeNetwork.getType() == ConnectivityManager.TYPE_VPN) {
                    result = 3;
                }
            }
        }
    }
    return result;
}

2
जैसा कि आपके पास 2 परिणाम संभव हैं, एक पूर्णांक वापस करने के बजाय एक बूलियन का उपयोग करना बेहतर है ...
ईसाई

3
@Christian के रूप में पीले अनुभाग में बताया गया है, इस सहायक फ़ंक्शन 3 संभव कहता है: No Internet, Cellularऔर Wi-Fi। यदि आप कनेक्शन प्रकार के बारे में परवाह नहीं करते हैं, तो अपने एप्लिकेशन को फिट करने के लिए कोड को संशोधित करने के लिए स्वतंत्र महसूस करें।
user1032613

1
उपरोक्त समाधान में टिप्पणी के बारे में क्या है "यदि आप वाई-फाई और एक वीपीएन से जुड़े हैं, तो आपकी वर्तमान स्थिति TRANSPORT_VPN हो सकती है, इसलिए आप इसके लिए भी जांच कर सकते हैं।"
डेविड

1
@ लुकास अगर आप उपयोग करते हैं तो आपको सावधान रहना होगा Boolean रैपर क्लास का करते हैं booleanजिसके बजाय आदिम है। अगर स्टेटमेंट में आपको चेक जोड़ना पड़ेगा null। क्या होगा अगर कल NetworkCapabilities में एक और नया ट्रांसपोर्ट मोड शुरू किया जाता है ... तो ब्रांचिंग के लिए पूर्णांक का उपयोग करने से मदद मिलेगी और आप स्विच मामलों में भी जा सकते हैं।
छाया Droid

3
मैं इस निरंतर
पदच्युत

16

अपडेटेड उत्तर (19: 07: 2018):

यदि इंटरनेट कनेक्शन उपलब्ध है, तो यह विधि आपको जाँचने में मदद करेगी।

public static boolean isNetworkAvailable(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (connectivityManager != null) {
        NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
        return (activeNetwork != null && activeNetwork.isConnectedOrConnecting());
    } else {
        return false;
    }
}

पुराना उत्तर:

सर्वोत्तम कोड पुन: उपयोग अभ्यास के लिए, पनीर ब्रेड उत्तर को सुधारना।

public static boolean isNetworkAvailable(Context context) {
    int[] networkTypes = {ConnectivityManager.TYPE_MOBILE,
            ConnectivityManager.TYPE_WIFI};
    try {
        ConnectivityManager connectivityManager =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        for (int networkType : networkTypes) {
            NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
            if (activeNetworkInfo != null &&
                    activeNetworkInfo.getType() == networkType)
                return true;
        }
    } catch (Exception e) {
        return false;
    }
    return false;
}

कोड को यूटिल क्लास में रखा जा सकता है और यह जांचने के लिए इस्तेमाल किया जा सकता है कि फोन आपके आवेदन के किसी भी हिस्से से वाईफाई या मोबाइल इंटरनेट के माध्यम से इंटरनेट से जुड़ा है या नहीं।


3
मैं लूप के लिए सक्रिय नेटवर्क के बाहर जाने का सुझाव देता हूं।
shtolik

20
activeNetwork.isConnectedOrConnecting()अब पदावनत किया गया है
MHSFisher

1
मैं activeNetwork.isConnectedOrConnecting () से activeNetwork.isConnected
Murillo Comino

NetworkInfo अब पदावनत हो गया है। फिर से अद्यतन करने की आवश्यकता है!
स्कॉट बिग्स

13

स्वीकृत उत्तर को संस्करण 28 में पदावनत किया गया है, इसलिए यहां समाधान है जो मैं अपनी परियोजना में उपयोग कर रहा हूं।

कनेक्शन प्रकार लौटाता है। गलत: कोई इंटरनेट कनेक्शन नहीं; सच: मोबाइल डेटा || वाई - फाई

public static boolean isNetworkConnected(Context context) { 
    boolean result = false; 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (cm != null) {
            NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
            if (capabilities != null) {
                if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                    result = true;
                } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                    result = true;
                }
            }
        }
    } else {
        if (cm != null) {
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            if (activeNetwork != null) {
                // connected to the internet
                if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                    result = true;
                } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
                    result = true;
                }
            }
        }
    }
    return result;
}

2
activeNetwork.getType () भी पदावनत है। आप activeNetwork.isConnected () का उपयोग कर सकते हैं;
अमन वर्मा

11

इस उत्तर के लिए मार्च 2020 तक अपडेट है जो API.29 के माध्यम से API.15 का समर्थन करता है, आप इसे मूल उत्तर के बाद पा सकते हैं

उत्तर फरवरी 2019

यह जांचने के लिए कि क्या आप ऑनलाइन हैं:

boolean isOnline() {
    // Checking internet connectivity
    ConnectivityManager connectivityMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = null;
    if (connectivityMgr != null) {
        activeNetwork = connectivityMgr.getActiveNetworkInfo();
    }
    return activeNetwork != null;
}

Android M से पहले / बाद में इंटरनेट कनेक्टिविटी का प्रकार प्राप्त करने के लिए

void internetType() {
    // Checking internet connectivity
    ConnectivityManager connectivityMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = null;
    if (connectivityMgr != null) {
        activeNetwork = connectivityMgr.getActiveNetworkInfo();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            NetworkCapabilities nc = connectivityMgr.getNetworkCapabilities(connectivityMgr.getActiveNetwork());
            if (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                // connected to mobile data
            } else if (nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                // connected to wifi
            }
        } else {
            if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                // connected to wifi
            } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
                // connected to mobile data
            }
        }
    }
}

सभी मामलों में नेटवर्क स्थिति तक पहुंचने के लिए अनुमति की आवश्यकता होती है

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

अद्यतन मार्च 2020

के रूप NetworkInfoमें पदावनत किया गया है और अब से एपीआई 29 के रूप में हमें ConnectivityManager.NetworkCallbackइसके नेटवर्क स्थिति परिवर्तन onAvailable()और onLost()कॉलबैक के साथ उपयोग करना है ।

उपयोग:

  • आप या तो इस पुस्तकालय का उपयोग कर सकते हैं , या सीधे नीचे दिए गए उपयोगिता वर्ग का उपयोग कर सकते हैं जो इस पुस्तकालय का एक हिस्सा है।

विशेषताएं

  • यह विधि LifecycleObserverमें कुछ सफाई करके स्मृति रिसाव से बचने के लिए कार्यान्वित करके जीवन चक्र के प्रति सचेत है onDestroy()
  • यह एपीआई 29 (एंड्रॉयड क्यू) के माध्यम से एपीआई 15 (आइसक्रीम सैंडविच) से समर्थन करता है
  • एपीआई 21 से पहले के एपीआई के लिए, यह एक संदर्भ-आधारित BoradcastReceiverऔर NetworkInfo, और ConnectivityManager.NetworkCallbackएपीआई 21 और इसके बाद के संस्करण का उपयोग करता है।
  • जब वाईफाई और सेलुलर नेटवर्क दोनों चालू होते हैं, तो सेलुलर नेटवर्क में संक्रमण के दौरान वाईफाई डिस्कनेक्ट होने पर कनेक्टिविटी श्रोता बाधित नहीं होगा।
  • जब सेलुलर नेटवर्क चालू होता है, तो जब वाईफाई कनेक्ट होता है और सक्रिय नेटवर्क (जैसा कि यह पसंदीदा नेटवर्क है) होने पर कनेक्टिविटी श्रोता बाधित नहीं करेगा।
  • यदि आप पुस्तकालय का उपयोग करने जा रहे हैं, तो इस अनुमति को शामिल करने की कोई आवश्यकता नहीं है android.permission.ACCESS_NETWORK_STATE; लेकिन आपको इसे शामिल करना होगा यदि आप उपयोगिता वर्ग का उपयोग करने जा रहे हैं।

क्षमताओं

  • वर्तमान कनेक्टिविटी स्थिति (ऑनलाइन / ऑफ़लाइन) प्राप्त करें।
  • डिवाइस के ऑफ़लाइन या ऑनलाइन होने पर इंटरनेट कनेक्शन की लगातार जाँच / सुनना और कॉलबैक को ट्रिगर करना।
  • सक्रिय इंटरनेट कनेक्शन (वाईफाई या सेलुलर) का प्रकार प्राप्त करें।
  • सभी उपलब्ध नेटवर्क (वाईफाई या सेलुलर) का प्रकार प्राप्त करें। >> केवल एपीआई 21+ पर समर्थित है
  • सभी उपलब्ध नेटवर्क की संख्या प्राप्त करें >> केवल API 21+ पर समर्थित है
@RequiresApi(api = Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
public class ConnectionUtil implements LifecycleObserver {

    private static final String TAG = "LOG_TAG";
    private ConnectivityManager mConnectivityMgr;
    private Context mContext;
    private NetworkStateReceiver mNetworkStateReceiver;

    /*
     * boolean indicates if my device is connected to the internet or not
     * */
    private boolean mIsConnected = false;
    private ConnectionMonitor mConnectionMonitor;


    /**
     * Indicates there is no available network.
     */
    private static final int NO_NETWORK_AVAILABLE = -1;


    /**
     * Indicates this network uses a Cellular transport.
     */
    public static final int TRANSPORT_CELLULAR = 0;


    /**
     * Indicates this network uses a Wi-Fi transport.
     */
    public static final int TRANSPORT_WIFI = 1;


    public interface ConnectionStateListener {
        void onAvailable(boolean isAvailable);
    }


    public ConnectionUtil(Context context) {
        mContext = context;
        mConnectivityMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        ((AppCompatActivity) mContext).getLifecycle().addObserver(this);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mConnectionMonitor = new ConnectionMonitor();
            NetworkRequest networkRequest = new NetworkRequest.Builder()
                    .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
                    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                    .build();
            mConnectivityMgr.registerNetworkCallback(networkRequest, mConnectionMonitor);
        }

    }


    /**
     * Returns true if connected to the internet, and false otherwise
     *
     * <p>
     * NetworkInfo is deprecated in API 29
     * https://developer.android.com/reference/android/net/NetworkInfo
     * <p>
     * getActiveNetworkInfo() is deprecated in API 29
     * https://developer.android.com/reference/android/net/ConnectivityManager#getActiveNetworkInfo()
     * <p>
     * getNetworkInfo(int) is deprecated as of API 23
     * https://developer.android.com/reference/android/net/ConnectivityManager#getNetworkInfo(int)
     */
    public boolean isOnline() {

        mIsConnected = false;

        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
            // Checking internet connectivity
            NetworkInfo activeNetwork = null;
            if (mConnectivityMgr != null) {
                activeNetwork = mConnectivityMgr.getActiveNetworkInfo(); // Deprecated in API 29
            }
            mIsConnected = activeNetwork != null;

        } else {
            Network[] allNetworks = mConnectivityMgr.getAllNetworks(); // added in API 21 (Lollipop)

            for (Network network : allNetworks) {
                NetworkCapabilities networkCapabilities = mConnectivityMgr.getNetworkCapabilities(network);
                if (networkCapabilities != null) {
                    if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                            || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
                            || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET))
                        mIsConnected = true;
                }
            }
        }

        return mIsConnected;

    }


    /**
     * Returns
     * <p> <p>
     * <p><p> NO_NETWORK_AVAILABLE >>> when you're offline
     * <p><p> TRANSPORT_CELLULAR >> When Cellular is the active network
     * <p><p> TRANSPORT_WIFI >> When Wi-Fi is the Active network
     * <p>
     */
    public int getActiveNetwork() {

        NetworkInfo activeNetwork = mConnectivityMgr.getActiveNetworkInfo(); // Deprecated in API 29
        if (activeNetwork != null)

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                NetworkCapabilities capabilities = mConnectivityMgr.getNetworkCapabilities(mConnectivityMgr.getActiveNetwork());
                if (capabilities != null)
                    if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                        // connected to mobile data
                        return TRANSPORT_CELLULAR;

                    } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                        // connected to wifi
                        return TRANSPORT_WIFI;
                    }

            } else {
                if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { // Deprecated in API 28
                    // connected to mobile data
                    return TRANSPORT_CELLULAR;

                } else if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { // Deprecated in API 28
                    // connected to wifi
                    return TRANSPORT_WIFI;
                }
            }
        return NO_NETWORK_AVAILABLE;
    }


    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public int getAvailableNetworksCount() {

        int count = 0;

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            Network[] allNetworks = mConnectivityMgr.getAllNetworks(); // added in API 21 (Lollipop)
            for (Network network : allNetworks) {
                NetworkCapabilities networkCapabilities = mConnectivityMgr.getNetworkCapabilities(network);
                if (networkCapabilities != null)
                    if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                            || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR))
                        count++;
            }

        }

        return count;
    }


    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public List<Integer> getAvailableNetworks() {

        List<Integer> activeNetworks = new ArrayList<>();

        Network[] allNetworks; // added in API 21 (Lollipop)
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            allNetworks = mConnectivityMgr.getAllNetworks();
            for (Network network : allNetworks) {
                NetworkCapabilities networkCapabilities = mConnectivityMgr.getNetworkCapabilities(network);
                if (networkCapabilities != null) {
                    if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI))
                        activeNetworks.add(TRANSPORT_WIFI);

                    if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR))
                        activeNetworks.add(TRANSPORT_CELLULAR);

                }
            }
        }

        return activeNetworks;
    }


    public void onInternetStateListener(ConnectionStateListener listener) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            mNetworkStateReceiver = new NetworkStateReceiver(listener);
            IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
            mContext.registerReceiver(mNetworkStateReceiver, intentFilter);

        } else {
            mConnectionMonitor.setOnConnectionStateListener(listener);
        }
    }


    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroy() {
        Log.d(TAG, "onDestroy");
        ((AppCompatActivity) mContext).getLifecycle().removeObserver(this);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            if (mConnectionMonitor != null)
                mConnectivityMgr.unregisterNetworkCallback(mConnectionMonitor);
        } else {
            if (mNetworkStateReceiver != null)
                mContext.unregisterReceiver(mNetworkStateReceiver);
        }

    }


    public class NetworkStateReceiver extends BroadcastReceiver {

        ConnectionStateListener mListener;

        public NetworkStateReceiver(ConnectionStateListener listener) {
            mListener = listener;
        }

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getExtras() != null) {

                NetworkInfo activeNetworkInfo = mConnectivityMgr.getActiveNetworkInfo(); // deprecated in API 29

                /*
                 * activeNetworkInfo.getState() deprecated in API 28
                 * NetworkInfo.State.CONNECTED deprecated in API 29
                 * */
                if (!mIsConnected && activeNetworkInfo != null && activeNetworkInfo.getState() == NetworkInfo.State.CONNECTED) {
                    Log.d(TAG, "onReceive: " + "Connected To: " + activeNetworkInfo.getTypeName());
                    mIsConnected = true;
                    mListener.onAvailable(true);

                } else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) {
                    if (!isOnline()) {
                        mListener.onAvailable(false);
                        mIsConnected = false;
                    }

                }

            }
        }
    }


    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public class ConnectionMonitor extends ConnectivityManager.NetworkCallback {

        private ConnectionStateListener mConnectionStateListener;

        void setOnConnectionStateListener(ConnectionStateListener connectionStateListener) {
            mConnectionStateListener = connectionStateListener;
        }

        @Override
        public void onAvailable(@NonNull Network network) {

            if (mIsConnected)
                return;

            Log.d(TAG, "onAvailable: ");

            if (mConnectionStateListener != null) {
                mConnectionStateListener.onAvailable(true);
                mIsConnected = true;
            }

        }

        @Override
        public void onLost(@NonNull Network network) {

            if (getAvailableNetworksCount() == 0) {
                mConnectionStateListener.onAvailable(false);
                mIsConnected = false;
            }

        }

    }

}

@ रसेल कृपया अद्यतन उत्तर की जाँच करें, आशा है कि यह मदद कर सकता है
ज़ैन

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

@Gokhan Arik .. अच्छा कैच मैं इसे हल करने पर काम कर रहा हूं
ज़ैन

1
इस चर्चा को देखें। gist.github.com/PasanBhanu/730a32a9eeb180ec2950c172d54bb06a
Gokhan Arik

@GokhanArik मदद के लिए धन्यवाद .. मैंने अभी-अभी अपना उत्तर अपडेट किया है और एपीआई उपयोग का विस्तार किया है, plz मुझे बताएं कि क्या आप किसी नोटिस को देखते हैं
जैन

4

यह जांचना अच्छा है कि आपका नेटवर्क इंटरनेट से जुड़ा है या नहीं:

@Suppress("DEPRECATION")
fun isNetworkAvailable(context: Context): Boolean {
    try {
        val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        return if (Build.VERSION.SDK_INT > 22) {
            val an = cm.activeNetwork ?: return false
            val capabilities = cm.getNetworkCapabilities(an) ?: return false
            capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        } else {
            val a = cm.activeNetworkInfo ?: return false
            a.isConnected && (a.type == ConnectivityManager.TYPE_WIFI || a.type == ConnectivityManager.TYPE_MOBILE)
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
    return false
}

आप जांचना भी चाह सकते हैं NetworkCapabilities.NET_CAPABILITY_VALIDATED
JJD

3

कोटलिन संस्करण:

fun isInternetOn(context: Context): Boolean {
   val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
   val activeNetwork = cm?.activeNetworkInfo
   return activeNetwork != null && activeNetwork.isConnected
}

3

जैसा कि पनीर ब्रेड ने सुझाव दिया , getActiveNetworkInfo () का उपयोग करें

getActiveNetworkInfo

एपीआई स्तर 1 में जोड़ा गया

NetworkInfo getActiveNetworkInfo ()

वर्तमान में सक्रिय डिफ़ॉल्ट डेटा नेटवर्क के बारे में विवरण देता है। कनेक्ट होने पर, यह नेटवर्क आउटगोइंग कनेक्शन के लिए डिफ़ॉल्ट मार्ग है। नेटवर्क ट्रैफ़िक आरंभ करने से पहले आपको हमेशा चेक काट दिया जाना चाहिए ()। डिफ़ॉल्ट नेटवर्क न होने पर यह अशक्त हो सकता है। इस विधि में कॉलर को अनुमति ACCESS_NETWORK_STATE रखने की आवश्यकता होती है। यदि कोई डिफ़ॉल्ट नेटवर्क वर्तमान में सक्रिय नहीं है, तो नेटवर्क डिफ़ॉल्ट रूप से वर्तमान डिफ़ॉल्ट नेटवर्क या नल के लिए NetworkInfo ऑब्जेक्ट लौटाता है।

संदर्भ: एंड्रॉइड स्टूडियो

 public final boolean isInternetOn() {

    // get Connectivity Manager object to check connection
    ConnectivityManager connec =
            (ConnectivityManager)getSystemService(getBaseContext().CONNECTIVITY_SERVICE);

    // Check for network connections
    if ( connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.CONNECTED ||
            connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.CONNECTING ) {

        // if connected with internet

        Toast.makeText(this, connec.getActiveNetworkInfo().getTypeName(), Toast.LENGTH_LONG).show();
        return true;

    } else if (
            connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.DISCONNECTED ||
                    connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.DISCONNECTED  ) {

        Toast.makeText(this, " Not Connected ", Toast.LENGTH_LONG).show();
        return false;
    }
    return false;
}

अब सुरक्षित कॉल ट्राई कैच के लिए विधि को कॉल करें

try {
    if (isInternetOn()) { /* connected actions */ }
    else { /* not connected actions */ }
} catch (Exception e){
  Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}

और जोड़ना मत भूलना:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

धन्यवाद, यह उपयोगी है। जब हम नेटवर्क की स्थिति की जाँच करते हैं और यदि वाईफाई और डेटा दोनों बंद हैं- तो उस समय ऐप क्रैश हो जाता है लेकिन समस्या को हल करने की कोशिश करें ..
Rucha Bhatt Joshi

हालांकि यह काम नहीं करता है अगर मैं जांचना चाहता हूं कि क्या एक विशेष प्रकार का नेटवर्क मौजूद है, तो सभी नेटवर्क मौजूद हैं, अर्थातgetNetworkInfo(ConnectivityManager.TYPE_ETHERNET).isAvailable
m0skit0

3
getState () पदावनत!
डिएगो वेन्केशियो

कई पदावनत निर्देश!
स्कॉट बिग्स

2

सुरक्षित पक्ष पर होने के लिए, मैं भी विधि का उपयोग करने का सुझाव दूंगा

NetworkInfo.isConnected ()

पूरी विधि नीचे दी जा सकती है:

/**
 * Checking whether network is connected
 * @param context Context to get {@link ConnectivityManager}
 * @return true if Network is connected, else false
 */
public static boolean isConnected(Context context){
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
        int networkType = activeNetwork.getType();
        return networkType == ConnectivityManager.TYPE_WIFI || networkType == ConnectivityManager.TYPE_MOBILE;
    } else {
        return false;
    }
}

9
activeNetwork.getType()पदावनत और ConnectivityManager.TYPE_WIFI पदावनत है
गोडविन

2

यहां मैं यह जांचता हूं कि क्या वर्तमान नेटवर्क सेलुलर का उपयोग कर रहा है या नवीनतम एंड्रॉइड संस्करणों पर नहीं है:

val isCellular: Boolean get() {
    val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        cm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
    } else {
        cm.activeNetworkInfo?.type == ConnectivityManager.TYPE_MOBILE
    }
}

2

(लगभग) सभी उत्तर एंड्रॉइड पी में पदावनत हैं, इसलिए यहां C#समाधान है ( जो जावा डेवलपर्स के लिए अनुसरण करना आसान है )

public bool IsOnline(Context context)
{
    var cm = (ConnectivityManager)context.GetSystemService(Context.ConnectivityService);

    if (cm == null) return false;

    if (Build.VERSION.SdkInt < BuildVersionCodes.M)
    {
        var ni = cm.ActiveNetworkInfo;

        if (ni == null) return false;

        return ni.IsConnected && (ni.Type == ConnectivityType.Wifi || ni.Type == ConnectivityType.Mobile);
    }

    return cm.GetNetworkCapabilities(cm.ActiveNetwork).HasTransport(Android.Net.TransportType.Wifi)
        || cm.GetNetworkCapabilities(cm.ActiveNetwork).HasTransport(Android.Net.TransportType.Cellular);
}   

यहाँ कुंजी है Android.Net.TransportType


Aaaannnndddd इसमें कुछ भी लिखा गया है!
प्रेस्कॉट चार्टियर

@PrescottChartier किस संस्करण में है?
मेहदी देघानी

2

हमें एक से अधिक बार इंटरनेट कनेक्टिविटी की जांच करने की आवश्यकता हो सकती है। इसलिए हमारे लिए यह आसान होगा यदि हम कोड ब्लॉक को विस्तार विधि में लिखते हैं Context। नीचे के लिए मेरे सहायक एक्सटेंशन हैं Contextऔर Fragment

इंटरनेट कनेक्शन की जाँच करना

fun Context.hasInternet(): Boolean {
    val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    return if (Build.VERSION.SDK_INT < 23) {
        val activeNetworkInfo = connectivityManager.activeNetworkInfo
        activeNetworkInfo != null && activeNetworkInfo.isConnected
    } else {
        val nc = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
        if (nc == null) {
            false
        } else {
            nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) ||
                    nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
        }
    }
}

अन्य एक्सटेंशन

fun Context.hasInternet(notifyNoInternet: Boolean = true, trueFunc: (internet: Boolean) -> Unit) {
    if (hasInternet()) {
        trueFunc(true)
    } else if (notifyNoInternet) {
        Toast.makeText(this, "No Internet Connection!", Toast.LENGTH_SHORT).show()
    }
}

fun Context.hasInternet(
    trueFunc: (internet: Boolean) -> Unit,
    falseFunc: (internet: Boolean) -> Unit
) {
    if (hasInternet()) {
        trueFunc(true)
    } else {
        falseFunc(true)
    }
}

fun Fragment.hasInternet(): Boolean = context!!.hasInternet()

fun Fragment.hasInternet(notifyNoInternet: Boolean = true, trueFunc: (internet: Boolean) -> Unit) =
    context!!.hasInternet(notifyNoInternet, trueFunc)

fun Fragment.hasInternet(
    trueFunc: (internet: Boolean) -> Unit, falseFunc: (internet: Boolean) -> Unit
) = context!!.hasInternet(trueFunc, falseFunc)

2

जांचें कि क्या इंटरनेट उपलब्ध है

@RequiresPermission(allOf = [
    Manifest.permission.ACCESS_NETWORK_STATE, 
    Manifest.permission.INTERNET
])
fun isInternetAvailable(context: Context): Boolean {
    val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
    val activeNetworkInfo = connectivityManager!!.activeNetworkInfo
    return activeNetworkInfo != null && activeNetworkInfo.isConnected
}

2

नीचे दिए गए android M (API 28) में कनेक्टिविटी मैनजर .getActiveNetwork () नहीं मिला है। networkInfo.getState () को Android L के ऊपर दर्शाया गया है।

तो, अंतिम उत्तर है:

public static boolean isConnectingToInternet(Context mContext) {
    if (mContext == null) return false;

    ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager != null) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            final Network network = connectivityManager.getActiveNetwork();
            if (network != null) {
                final NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(network);

                return (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) ||
                        nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI));
            }
        } else {
            NetworkInfo[] networkInfos = connectivityManager.getAllNetworkInfo();
            for (NetworkInfo tempNetworkInfo : networkInfos) {
                if (tempNetworkInfo.isConnected()) {
                    return true;
                }
            }
        }
    }
    return false;
}

1
आप कहते हैं कि getActiveNetwork () M के नीचे Android में नहीं मिला है, लेकिन आपका कोड लॉलीपॉप पर इसका उपयोग करता है?
3c71

2

कई उत्तर अभी भी 23 से नीचे getNetworkType का उपयोग करते हैं जो कि पदावनत है; डिवाइस में इंटरनेट कनेक्शन है या नहीं यह जांचने के लिए नीचे दिए गए कोड का उपयोग करें।

public static boolean isNetworkConnected(Context context) {

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (cm != null) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
            return capabilities != null && (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR));
        } else {
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            return activeNetwork != null && activeNetwork.isConnected();
        }
    }

    return false;
}

..

और, मेनिफेस्ट में इस लाइन को जोड़ना न भूलें

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

1

चूंकि पोस्ट किए गए उत्तर केवल आपको सक्रिय नेटवर्क को क्वेरी करने की अनुमति देते हैं, यहां NetworkInfoकिसी भी नेटवर्क के लिए कैसे प्राप्त किया जा सकता है, न केवल सक्रिय एक (उदाहरण के लिए वाईफाई नेटवर्क) (क्षमा करें, कोटलिन कोड आगे)

(getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).run {
    allNetworks.find { getNetworkInfo(it).type == ConnectivityManager.TYPE_WIFI }?.let { network -> getNetworkInfo(network) }
//    getNetworkInfo(ConnectivityManager.TYPE_WIFI).isAvailable // This is the deprecated API pre-21
}

इसके लिए एपीआई 21 या उच्चतर और अनुमति की आवश्यकता है android.permission.ACCESS_NETWORK_STATE


1
currentNetwork.getType () और ConnectivityManager.TYPE_WIFI दोनों एपीआई 28 में
चित्रित किए गए हैं

@Abushawish एपीआई 28 के लिए अनुशंसित समाधान क्या है?
tmm1

रिप्लेसमेंट अब हैcm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
tmm1

1

NetManager जिसका उपयोग आप कोटलिन के साथ एंड्रॉइड पर इंटरनेट कनेक्शन की जांच करने के लिए कर सकते हैं

यदि आप minSdkVersion> = 23 का उपयोग करते हैं

class NetManager @Inject constructor(var applicationContext: Context) {
    val isConnectedToInternet: Boolean?
        get() = with(
            applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE)
                    as ConnectivityManager
        ) {
            isConnectedToInternet()
        }
}

fun ConnectivityManager.isConnectedToInternet() = isConnected(getNetworkCapabilities(activeNetwork))

fun isConnected(networkCapabilities: NetworkCapabilities?): Boolean {
    return when (networkCapabilities) {
        null -> false
        else -> with(networkCapabilities) { hasTransport(TRANSPORT_CELLULAR) || hasTransport(TRANSPORT_WIFI) }
    }
}

यदि आप minSdkVersion <23 का उपयोग करते हैं

class NetManager @Inject constructor(var applicationContext: Context) {
    val isConnectedToInternet: Boolean?
        get() = with(
            applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE)
                    as ConnectivityManager
        ) {
            isConnectedToInternet()
        }
}

fun ConnectivityManager.isConnectedToInternet(): Boolean = if (Build.VERSION.SDK_INT < 23) {
    isConnected(activeNetworkInfo)
} else {
    isConnected(getNetworkCapabilities(activeNetwork))
}


fun isConnected(network: NetworkInfo?): Boolean {
    return when (network) {
        null -> false
        else -> with(network) { isConnected && (type == TYPE_WIFI || type == TYPE_MOBILE) }
    }
}

fun isConnected(networkCapabilities: NetworkCapabilities?): Boolean {
    return when (networkCapabilities) {
        null -> false
        else -> with(networkCapabilities) { hasTransport(TRANSPORT_CELLULAR) || hasTransport(TRANSPORT_WIFI) }
    }
}

1

https://www.agnosticdev.com/content/how-detect-network-connectivity-android

कृपया इस ट्यूटोरियल का अनुसरण करें, इससे किसी को भी उत्तर तलाशने में मदद मिलेगी।

नोट networkInfo को हटा दिया गया है इसलिए इसे प्रतिस्थापित करें isNetworkReacheable () @vidha उत्तर के साथ getApplicationContext () पैरामीटर के रूप में

  public static boolean isNetworkReacheable(Context context) {
    boolean result = false;
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (cm != null) {
            NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
            if (capabilities != null) {
                if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                    result = true;
                } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                    result = true;
                }
            }
        }
    } else {
        if (cm != null) {
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            if (activeNetwork != null) {
                // connected to the internet
                if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                    result = true;
                } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
                    result = true;
                }
            }
        }
    }
    return result;
}

0
public boolean isConnectedToWifi(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager == null) {
        return false;
    }

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
        Network network = connectivityManager.getActiveNetwork();
        NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
        if (capabilities == null) {
            return false;
        }
        return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
    } else {
        NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (networkInfo == null) {
            return false;
        }
        return networkInfo.isConnected();
    }
}

0

यह मेरे लिए कोटलिन में काम करता है। एपीआई के बहुत सारे नेटवर्क प्रबंधक वर्ग में पदावनत किए जाते हैं, इसलिए नीचे उत्तर सभी एपीआई समर्थन को कवर करते हैं।

fun isNetworkAvailable(context: Context): Boolean {
    var result = false
    (context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).apply {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                result = isCapableNetwork(this,this.activeNetwork)
            } else {
                val networkInfos = this.allNetworks
                for (tempNetworkInfo in networkInfos) {
                    if(isCapableNetwork(this,tempNetworkInfo))
                        result =  true
                }
            }
        }

    return result
}

fun isCapableNetwork(cm: ConnectivityManager,network: Network?): Boolean{
     cm.getNetworkCapabilities(network)?.also {
        if (it.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
            return true
        } else if (it.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
            return true
        }
    }
    return false
}

आप भी नीचे जोड़ देंगे

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

0

नीचे दिया गया कोड सभी API पर काम करता है। (कोटलिन)

हालाँकि, getActiveNetworkInfo () केवल API 29 में अपदस्थ है और सभी API पर काम करता है, इसलिए हम इसे सभी Api के नीचे 29 में उपयोग कर सकते हैं

fun isInternetAvailable(context: Context): Boolean {
            var result = false
            val connectivityManager =
                context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                val networkCapabilities = connectivityManager.activeNetwork ?: return false
                val actNw =
                    connectivityManager.getNetworkCapabilities(networkCapabilities) ?: return false
                result = when {
                    actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
                    actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
                    actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
                    else -> false
                }
            } else {
                connectivityManager.run {
                    connectivityManager.activeNetworkInfo?.run {
                        result = when (type) {
                            ConnectivityManager.TYPE_WIFI -> true
                            ConnectivityManager.TYPE_MOBILE -> true
                            ConnectivityManager.TYPE_ETHERNET -> true
                            else -> false
                        }

                    }
                }
            }

            return result
        }

0

कुछ इस तरह:

public boolean hasConnection(final Context context){
    ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNW = cm.getActiveNetworkInfo();
    if (activeNW != null && activeNW.isConnected())
    {
        return true;
    }
    return false;
}

और मुख्य कार्यक्रम निकाय में:

if(hasConnection(this)) {
    Toast.makeText(this, "Active networks OK ", Toast.LENGTH_LONG).show();
    getAccountData(token, tel);
}
else  Toast.makeText(this, "No active networks... ", Toast.LENGTH_LONG).show();

0

यह एंड्रॉइड 10 में भी काम करेगा। यदि इंटरनेट से जुड़ा है तो यह सही वापस आ जाएगा।

private fun isOnline(): Boolean {
        val connectivityManager =
                getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val capabilities =
                connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
        if (capabilities != null) {
            when {
                capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
                    Log.i("Internet", "NetworkCapabilities.TRANSPORT_CELLULAR")
                    return true
                }
                capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
                    Log.i("Internet", "NetworkCapabilities.TRANSPORT_WIFI")
                    return true
                }
                capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> {
                    Log.i("Internet", "NetworkCapabilities.TRANSPORT_ETHERNET")
                    return true
                }
            }
        }
        return false
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.