Итак, если мы посмотрим на исходный код класса NetworkInfo.java
, вы увидите, что подробные состояния сети объявлены как Enum,
public enum DetailedState {
/** Ready to start data connection setup. */
IDLE,
/** Searching for an available access point. */
SCANNING,
/** Currently setting up data connection. */
CONNECTING,
/** Network link established, performing authentication. */
AUTHENTICATING,
/** Awaiting response from DHCP server in order to assign IP address information. */
OBTAINING_IPADDR,
/** IP traffic should be available. */
CONNECTED,
/** IP traffic is suspended */
SUSPENDED,
/** Currently tearing down data connection. */
DISCONNECTING,
/** IP traffic not available. */
DISCONNECTED,
/** Attempt to connect failed. */
FAILED,
/** Access to this network is blocked. */
BLOCKED,
/** Link has poor connectivity. */
VERIFYING_POOR_LINK,
/** Checking if network is a captive portal */
CAPTIVE_PORTAL_CHECK
}
Но если вы прочитаете комментарии для этих подробных состояний, то об этих * 1007 будет сказано ниже.
Мелкозернистое состояние сетевого подключения. Этот уровень детализации
вероятно, представляет интерес для нескольких приложений. Большинство должно использовать
android.net.NetworkInfo.State вместо этого.
Метод isConnected()
внутри класса NetworkInfo.java проверяет только на State.CONNECTED
State
,
public boolean isConnected() {
synchronized (this) {
return mState == State.CONNECTED;
}
}
По существу, если вы используете
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
этого должно быть достаточно, как указано выше, код будет запрашивать активную сеть и определять, имеет ли она подключение к Интернету. Как только вы это узнаете, вы можете перейти к доступу к интернет-ресурсу.