AAD*_*ing 3

因此,如果我们查看类的源代码,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
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果您阅读这些详细状态的评论,它会在下面说明这些内容

网络连接的细粒度状态。很少有应用程序可能会对这种详细程度感兴趣。大多数应该使用 android.net.NetworkInfo.State State 代替。

isConnected()NetworkInfo.java 类中的方法正在检查唯一的State.CONNECTED State

public boolean isConnected() {
        synchronized (this) {
            return mState == State.CONNECTED;
        }
    }
Run Code Online (Sandbox Code Playgroud)

基本上如果你使用

NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
                      activeNetwork.isConnectedOrConnecting();
Run Code Online (Sandbox Code Playgroud)

这应该足够了,因为上面的代码将查询活动网络并确定它是否具有互联网连接。一旦您知道了,您就可以继续访问互联网资源。