2

我使用此代码检查设备在应用加载时是否在线。

public boolean isOnline() 
{
    ConnectivityManager connMgr = (ConnectivityManager) 
            getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    return (networkInfo != null && networkInfo.isConnected());
}  

但这总是返回 true,即使它关闭了计算机 Wifi 进行测试。这个功能只是测试连接能力还是实际连接?

谢谢!

4

3 回答 3

9

尝试使用:

private boolean isOnline()
    {
        try
        {
            ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
            return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 
        }
        catch (Exception e)
        {
            return false;
        }
    }

mContext您正在使用的上下文在哪里。

我的猜测是您的代码可以在设备上正常运行,但您可能正在模拟器上进行测试。我注意到有时即使计算机的互联网关闭,模拟器也会保持连接状态。要获得正确的功能,您应该进入设置并从那里禁用 WiFi 和移动数据,而不是关闭计算机 WiFi。

此外,如果设备正在连接,我上面给出的代码也会返回 true,而您使用的代码只有在您已经建立连接时才会返回 true。

于 2012-10-05T19:14:05.447 回答
4

这段代码一直对我有用。

`

public boolean isNetworkAvailable() {
        ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);

// test for connection
        if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable()
                && cm.getActiveNetworkInfo().isConnected()) {
            return true;
        } else {
            return false;
        }
    } 
于 2012-10-05T19:31:26.647 回答
1
protected boolean isOnline() 
{
    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null) { // connected to the internet
        if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
            if (activeNetwork.isConnected())
                haveConnectedWifi = true;
        } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
            if (activeNetwork.isConnected())
                haveConnectedMobile = true;
        }
    }

    return haveConnectedWifi || haveConnectedMobile;
}

并且需要这两个权限manifest

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2016-11-17T03:20:07.210 回答