Вы правы. Код, который вы предоставили, только проверяет наличие сетевого подключения.
Лучший способ проверить, есть ли активное подключение к Интернету, это попытаться подключиться
на известный сервер через http.
public static boolean hasActiveInternetConnection(Context context) {
if (isNetworkAvailable(context)) {
try {
HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
urlc.setRequestProperty("User-Agent", "Test");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1500);
urlc.connect();
return (urlc.getResponseCode() == 200);
} catch (IOException e) {
Log.e(LOG_TAG, "Error checking internet connection", e);
}
} else {
Log.d(LOG_TAG, "No network available!");
}
return false;
}
Конечно, вы можете заменить http://www.google.com
URL-адрес любым другим сервером, к которому вы хотите подключиться, или сервер, который, как вы знаете, имеет хорошее время работы.
Как Тони Чо также указал в этом комментарии ниже , убедитесь, что вы не запускаете этот код в главном потоке, в противном случае вы получите исключение NetworkOnMainThread (в Android 3.0 или более поздней версии). Вместо этого используйте AsyncTask или Runnable.
Если вы хотите использовать google.com, обратите внимание на модификацию Jeshurun. В своем ответе он изменил мой код и сделал его немного более эффективным. Если вы подключитесь к
HttpURLConnection urlc = (HttpURLConnection)
(new URL("http://clients3.google.com/generate_204")
.openConnection());
и затем проверьте код ответа для 204
return (urlc.getResponseCode() == 204 && urlc.getContentLength() == 0);
тогда вам не нужно сначала извлекать всю главную страницу Google.