Проверка активного подключения к Интернету Android
Я пытаюсь написать часть в своем приложении, которая будет различать активное подключение к Wi-Fi и фактическое подключение к Интернету. Узнать, есть ли активное подключение к Wi-Fi, довольно просто с помощью диспетчера подключений, однако каждый раз, когда я пытаюсь проверить, могу ли я подключиться к веб-сайту, когда Wi-Fi подключен, но подключения к Интернету нет, я попадаю в бесконечный цикл. Я пытался пропинговать Google, однако в итоге получилось то же самое:
publicstaticvoidisNetworkAvailable(Context context){ HttpGethttpGet=newHttpGet("http://www.google.com"); HttpParamshttpParameters=newBasicHttpParams(); // Set the timeout in milliseconds until a connection is established. // The default value is zero, that means the timeout is not used. inttimeoutConnection=3000; HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); // Set the default socket timeout (SO_TIMEOUT) // in milliseconds which is the timeout for waiting for data. inttimeoutSocket=5000; HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
Вот современный код, который использует AsynTask, чтобы обойти проблему, из-за которой Android выходит из строя при попытке подключения к основному потоку, и выводит предупреждение с опцией промывки и повтора для пользователя.
@Override protectedvoidonPostExecute(Boolean result) { if (!result) { // code if not connected AlertDialog.Builderbuilder=newAlertDialog.Builder(MainActivity.this); builder.setMessage("An internet connection is required."); builder.setCancelable(false);
Чтобы проверить, имеет ли устройство Android активное подключение, я использую приведенный ниже метод hasActiveInternetConnection (), который (1) пытается определить, доступна ли сеть, и (2) затем подключается к google.com чтобы определить, активна ли сеть.
publicstaticbooleanhasActiveInternetConnection(Context context) { if (isNetworkAvailable(context)) { if (connectGoogle()) { returntrue; } else { //one more try return connectGoogle(); } } else { log("No network available! (in hasActiveInternetConnection())"); returnfalse; } }