Ниже приведен фрагмент кода 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();
}
Но я думаю, что это не является хорошим способом, потому что он может потреблять много времени
Итак, есть ли альтернативные эффективные (с точки зрения времени, скорости) способы обеспечения того, чтобы мы были подключены к сети, а также доступны для большинства обычных интернет-сервисов?
Это хороший способ проверить, но вы можете написать организованным способом в заданном ответе по вашему вопросу. –
Я предлагаю вам ознакомиться с этим http://stackoverflow.com/questions/8919083/checking-host-reachability-availability-in-android –