Detect whether there is an Internet connection available on Android
android, android-internet, internet-connection
Solution
The `getActiveNetworkInfo()` method of `ConnectivityManager` returns a `NetworkInfo` instance representing the first connected network interface it can find or `null` if none of the interfaces are connected. Checking if this method returns `null` should be enough to tell if an internet connection is available or not.
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager != null ? connectivityManager.getActiveNetworkInfo() : null;
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
You will also need:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
in your android manifest.
Edit:
Note that having an active network interface doesn't guarantee that a particular networked service is available. Network issues, server downtime, low signal, captive portals, content filters and the like can all prevent your app from reaching a server. For instance you can't tell for sure if your app can reach Twitter until you receive a valid response from the Twitter service.
Problem
Possible Duplicate: How to check internet access on Android? InetAddress never timeouts I need to detect whether the Android device is connected to the Internet. The `NetworkInfo` class provides a non-static method `isAvailable()` that sounds perfect. Problem is that: ``` NetworkInfo ni = new NetworkInfo(); if (!ni.isAvailable()) { // do something } ``` throws this error: ``` The constructor NetworkInfo is not visible. ``` Safe bet is there is another class that returns a `NetworkInfo` object. But I don't know which. - How to get the above snippet of code to work? - How could I have found myself the information I needed in the online documentation? - Can you suggest a better way for this type of detection?