Я пытался во многих отношениях проверить Интернет-соединение в свой эмулятор андроида
ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info= conMgr.getActiveNetworkInfo();
if(info != null || info.isConnected()) {
Log.v("NetworkInfo","Connected State");
}
else{
Log.v("NetworkInfo","Not Connected state");
Log.v("Reason",info.getReason());
}
даже если я отключаю Интернет-соединение в своей системе, мой код, кажется, отображает Связанное состояние, таким образом, я предположил, что это может работать
if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED
|| conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED ) {
Log.v("Congr","Connection Present");
}
else if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED
|| conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED) {
Log.v("conMgr"," No Connection");
}
но вышеупомянутый код также отображает "Соединение, Существующее", даже когда я разъединяю интернет-кабели..Please помогают найти корректный способ сделать, этот.I имеет ACCESS_NETWORK_STATE и ИНТЕРНЕТ-разрешение в моем файле манифеста
1 Отсоединение интернет-кабелей не имеет значения. Используйте F8 для выключения / включения Интернета в эмуляторе
2 В первом коде эта логика неверна:
if(info != null || info.isConnected()) {
Log.v("NetworkInfo","Connected State");
}
Это должно быть:
if(info != null && info.isConnected()) {
Log.v("NetworkInfo","Connected State");
}
Если вы используете || тогда вот результат: а) когда информация равна нулю, info.isConnected () выйдет из строя б) если информация не равна нулю, вы всегда будете показывать Connected State
. Однако, даже если вы исправите это, код не будет полностью правильным (см. 4 )
3 В второй код, эта логика неверна:
else if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED
|| conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED) {
Log.v("conMgr"," No Connection");
}
должно быть:
else {
Log.v("conMgr"," No Connection");
}
Почему? Потому что состояний больше, чем СОЕДИНЕН и ОТКЛЮЧЕН.
Однако, даже если вы это исправите, код не будет полностью правильным (см. 4 )
4 Это работает на эмуляторе и устройствах.
connected = ( conMgr.getActiveNetworkInfo() != null &&
conMgr.getActiveNetworkInfo().isAvailable() &&
conMgr.getActiveNetworkInfo().isConnected() )
Обратите внимание на использование isAvailable - без этого isConnected может возвращать TRUE, когда WIFI отключен.
Надеюсь, это поможет!