Java NetworkInfo.isConnected()和NetworkInfo.getDetailedState()之间的差异==NetworkInfo.DetailedState.CONNECTED。使用什么?

Java NetworkInfo.isConnected()和NetworkInfo.getDetailedState()之间的差异==NetworkInfo.DetailedState.CONNECTED。使用什么?,java,android,networkinfo,Java,Android,Networkinfo,我想知道哪种方法可以精确地检查网络状态以成功连接。Java: ConnectivityManager manager = (ConnectivityManager)getApplication.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info=manager.getActiveNetworkInfo() if(info!=null && info.isConnect

我想知道哪种方法可以精确地检查网络状态以成功连接。

Java:

 ConnectivityManager manager =
               (ConnectivityManager)getApplication.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo info=manager.getActiveNetworkInfo()

if(info!=null && info.isConnected()){
// you are online for sure.
}
Kotlin:

val manager = application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

        val info = manager.getActiveNetworkInfo()

        if (info != null && info.isConnected()) {
            // you are online for sure.
        }
我在开发过程中使用上述代码,以确保我的设备已连接到internet

阅读此文了解差异以及如何从源代码更改状态

public boolean isConnected() {
    synchronized (this) {
        return mState == State.CONNECTED;
    }
}
所以是一样的

从这里

您需要将其添加到您的清单中

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

因此,如果我们查看
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
    }
但是,如果你阅读了这些详细的评论,请在下面说明

网络连接的细粒度状态。这一层次的细节 可能对少数应用程序感兴趣。大多数人应该使用 改为android.net.NetworkInfo.State状态

NetworkInfo.java类中的
isConnected()
方法正在检查
状态。仅已连接
状态

public boolean isConnected() {
        synchronized (this) {
            return mState == State.CONNECTED;
        }
    }
基本上如果你使用

NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
                      activeNetwork.isConnectedOrConnecting();
这应该足够了,因为上面的代码将查询活动网络并确定它是否具有Internet连接。一旦你知道了,你就可以继续访问互联网资源了

NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
                      activeNetwork.isConnectedOrConnecting();