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();
}
Но я думаю, что это не очень хороший способ, потому что он может занять много времени
Так есть ли альтернативный эффективный (с точки зрения времени и скорости) способ обеспечения того, чтобы мы были подключены к сети, а также были доступны для большинства распространенных интернет-услуг?