Android: проверьте сеть и реальное интернет-соединение

Ниже приведен фрагмент кода Android, который отлично работает, чтобы проверить, подключена сеть или нет.

public static boolean isNetworkAvailable(Context context) 
{
    ConnectivityManager mConnectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    return (mConnectivityManager != null && mConnectivityManager.getActiveNetworkInfo().isConnectedOrConnecting()) ? true : false;
}

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Но наличие активного сетевого интерфейса не гарантирует доступности определенного сетевого сервиса.

Много раз случается, что мы подключены к сети, но все еще не достижимы к обычным сетевым услугам, например, Google

Общий сценарий:

Android-устройство подключено к Wi-Fi, который оказывается в частной сети. Поэтому isNetworkAvailable вернет, что сеть подключена, но не может быть подключена к какой-либо другой службеИногда сигнал телефона показывает, что он подключен к тарифному плану поставщика услуг. таким образом, сетевое подключение верно, но все равно не может получить доступ к Google / Yahoo.

Один из способов - проверить, возвращает ли функция isNetworkAvailable значение TRUE, а затем выполнить следующий код.

HttpGet request = new HttpGet(url));
   HttpParams httpParameters = new BasicHttpParams();
   int timeoutConnection = 60000;
   HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
   int timeoutSocket = 60000;
   HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

   DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
   request.addHeader("Content-Type", "application/json");
   HttpResponse response = httpClient.execute(request);

   HttpEntity entity = response.getEntity();


     if (entity != null)
      {
         result = EntityUtils.toString(entity);
      }

   }
 catch (SocketException e)
  {
     return "Socket Exceptiopn:" + e.toString();
  }
 catch (Exception e)
  {
     return "General Execption:" + e.toString();
  }

Но я думаю, что это не очень хороший способ, потому что он может занять много времени

Так есть ли альтернативный эффективный (с точки зрения времени и скорости) способ обеспечения того, чтобы мы были подключены к сети, а также были доступны для большинства распространенных интернет-услуг?

Ответы на вопрос(3)

Ваш ответ на вопрос