检查在线状态android

时间:2012-10-05 19:10:07

标签: android

我正在使用此代码检查设备是否在应用程序加载时处于联机状态。

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

但即使它已关闭计算机Wifi进行测试,此ALWAYS也会返回true。这个功能只是测试连接或实际连接的能力吗?

谢谢!

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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;
        }
    } 

答案 2 :(得分: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

中的这2个权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />