Я видел все ответы здесь о подключении к сети, и они очень хороши. Единственная проблема - следующий вариант использования.Тест для подключения к Интернету в Android
Если телефон подключен к сети Wi-Fi, но маршрутизатор потерял соединение с Интернетом. так что я думал о написании этого дополнения к коду данного вокруг SO:
/** Google public DNS service IP address **/
public static final String GOOGLE = "http://8.8.8.8";
public static boolean isConnected(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info == null) {
return false;
}
if (info.isConnected()) {
try {
InetAddress addr = InetAddress.getByName(GOOGLE);
return addr.isReachable(10000);
} catch (UnknownHostException e) {
Log.wtf("Utils", e);
} catch (IOException e) {
Log.wtf("Utils", e);
}
return false;
} else
return false;
}
}
Единственная проблема с этим состоит в том, что она работает в основном потоке, или утверждать, более правильно, он выходит из строя при работе от основной-нити.
Если я запустил его в отдельном потоке, он вернется, прежде чем получать правильный ответ с сервера.
Любые мысли о том, как тестировать Интернет соединение (как указано в сетевом соединении)?
зачем его вернуться, прежде чем он получит действительный ответ? Можете ли вы показать нам свою резьбовую реализацию? – WarrenFaith
, если я запустил новый поток для ping google, метод вернется, не дожидаясь окончания потока. @WarrenFaith вы можете предложить способ сделать это без вопроса о завершении метода до получения ответа? – thepoosh
Каким образом поток предназначен для работы. Вы должны реализовать Broadcast или обработчик, который будет уведомлен, если есть соединение или нет. – WarrenFaith