使用Context.CONNECTIVITY_SERVICE检查Internet连接

时间:2012-01-25 11:47:26

标签: android networking

我正在使用此代码检查互联网连接:

private boolean checkInternetConnection() {
    ConnectivityManager cm = (ConnectivityManager)
                              getSystemService(Context.CONNECTIVITY_SERVICE);
    // test for connection
    if (cm.getActiveNetworkInfo() != null
            && cm.getActiveNetworkInfo().isAvailable()
            && cm.getActiveNetworkInfo().isConnected()) {
        return true;
    } else {
        return false;
    }
}

但即使我关闭wifi,它仍然会返回true。

在仿真器和设备上尝试了相同的结果?
有什么问题?

4 个答案:

答案 0 :(得分:6)

这个简单的代码适用于我的情况:

public boolean netConnect(Context ctx)
{
    ConnectivityManager cm;
    NetworkInfo info = null;
    try
    {
        cm = (ConnectivityManager) 
              ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
        info = cm.getActiveNetworkInfo();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    if (info != null)
    {
        return true;
    }
    else
    {
        return false;
    }
}

也是这一个..

public boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager)
                              getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}

答案 1 :(得分:2)

您可以使用以下内容:

public boolean isNetworkAvailable(Context contextValue) {
    Context context = contextValue;
    ConnectivityManager connectivity = (ConnectivityManager)
                         context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity != null) {
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null) {
            for (int i = 0; i < info.length; i++) {
                if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                }
            }
        }
    }
    return false;
}

答案 2 :(得分:1)

试试这个......

if((connMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED) ||  (connMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED))                   
{
   return true;
}else
{
   return false;
}

答案 3 :(得分:1)

您可以按如下方式检查WIFI和互联网:

private boolean haveNetworkConnection() {
boolean haveConnectedWifi = false;
boolean haveConnectedMobile = false;

ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
    if (ni.getTypeName().equalsIgnoreCase("WIFI"))
        if (ni.isConnected())
            haveConnectedWifi = true;
    if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
        if (ni.isConnected())
            haveConnectedMobile = true;
}
return haveConnectedWifi || haveConnectedMobile;
}

显然,可以轻松修改它以检查各个特定的连接类型,例如,如果您的应用需要更高的Wi-Fi速度才能正常工作等。