Итак, это довольно откровение - факт, что Android SDK, похоже, не имеет надежного способа проверить доступ в Интернет.Проверка Android на Android (не проверка сети)
Позвольте мне уточнить.
Android документация & большинство онлайн образцы используют подход, подобный найденному здесь: https://stackoverflow.com/a/4009133/980917
что-то похожее на:
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}
Однако - это просто проверяет, если вы подключены к сети и не гарантируйте, что вы сможете добраться до интернета.
Для тех, кто этого не знает, его довольно легко воспроизвести, отсоединив кабель «IN» Ethernet от вашего маршрутизатора или подключив к любому Wi-Fi, который не подключен к Интернету.
ИЗВЕСТНЫЕ ДОРАБОТКИ:
1) Попробуйте достичь веб-сайт: https://stackoverflow.com/a/5803489/980917 Это проблематично, как управление потребности Thread.
2) Попробуйте выполнить проверку DNS в Google: https://stackoverflow.com/a/27312494/980917 Не нужно обертывать в поток, но будет заморозить интерфейс.
Что я ищу:
В идеале я хотел бы иметь чек Интернет как простой статический метод в служебный класс, который может быть вызван из пользовательского интерфейса или код бизнес-логики. Из-за этого вышеупомянутые решения действительно не работают хорошо, так как требуют дополнительных накладных расходов в классе caller для управления потоками.
Есть ли способ получить надежную проверку через Интернет в Android без загрязнения класса вызывающего абонента с помощью кода управления потоками?
Спасибо.
Спасибо за это - попробуем. Хорошая реализация известных методов. Я начинаю понимать, что мне нужно будет сделать рефакторинг, чтобы все проверки Интернета не выполнялись в потоке пользовательского интерфейса. – AlexVPerl
Привет, снова - я интегрирую класс вспомогательного подключения, есть ли у вас пример быстрого использования, который вы можете предоставить? благодаря! – AlexVPerl
Спасибо, я закончил с помощью checkHostByConnection() - это работало лучше всего из решений. – AlexVPerl