что касается названия вопроса, вы хотите проверить доступ в интернет,
так что самый быстрый и эффективный способ хотя бы на данный момент,
Thnx до Левит на основании его ответа https://stackoverflow.com/a/27312494/3818437
Если вы просто хотите проверить соединение с какой-либо сетью - вам все равно
если интернет доступен - тогда большинство ответов здесь (включая
принято), реализация isConnectedOrConnecting () будет работать хорошо.
Если вы хотите знать, если у вас есть подключение к интернету (как
название вопроса указывает) пожалуйста, прочитайте на Ping для основного имени
Серверы
public boolean isOnline() {
Runtime runtime = Runtime.getRuntime();
try {
Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = ipProcess.waitFor();
return (exitValue == 0);
} catch (IOException e) { e.printStackTrace(); }
catch (InterruptedException e) { e.printStackTrace(); }
return false; }
Вот и все! Да, это коротко, да, это быстро, нет, его не нужно запускать в фоновом режиме, нет, вам не нужны права root.
Возможные вопросы
Это действительно достаточно быстро?
Да, очень быстро!
Неужели нет надежного способа проверить, доступен ли интернет,
кроме тестирования чего-либо в интернете?
Не настолько, насколько я знаю, но дайте мне знать, и я отредактирую свой ответ.
Разве я не могу просто пинговать свою собственную страницу, которую я все равно хочу запросить?
Конечно! Вы можете даже проверить оба, если вы хотите различать
"подключение к интернету доступно" и ваши собственные серверы доступны
Что делать, если DNS не работает?
Google DNS (например, 8.8.8.8) является крупнейшей общедоступной службой DNS в
Мир. По состоянию на 2013 год он обслуживает 130 миллиардов запросов в день. Давайте просто
скажем, ваше приложение не отвечает, вероятно, не будет разговором о
день.
Какие разрешения требуются?
Просто
доступ в интернет - какой сюрприз ^^ (кстати, вы когда-нибудь задумывались,
как некоторые из предложенных здесь методов могут даже иметь удаленный клей
о доступности интернета, без этого разрешения?)