2011-08-15 26 views
1

大家好,我需要验证,如果我的设备当前连接到互联网或没有,所以我写了这个类,使用ConnectivityManager检查:ConnectivityManager验证互联网连接

public boolean checkInternetConnection() { 
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

    if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) { 
     return true; 

    } else { 
     return false; 
    } 
} 

的伟大工程,因为现在该方法位于主包(com.App)中的一个类中,但是如何更改代码以使其在com.App.Utility中定义的类中工作?

谢谢!

回答

8
package com.app.utility; 

    public class Utilities { 

    public static final boolean CheckInternetConnection(Context context) { 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) { 
     return true; 

     } else { 
     return false; 
     } 
    } 
    } 
+0

完美谢谢:) –

2

使用getActiveNetworkInfo()的唯一问题是,有很多情况下无法正确检测连接。例如,如果移动网络在手机上被禁用,但WiFi可用,则活动网络仍可被视为移动网络,因此返回错误。

另一种方法是:

public boolean isOnline() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfoMob = cm.getNetworkInfo(cm.TYPE_MOBILE); 
    NetworkInfo netInfoWifi = cm.getNetworkInfo(cm.TYPE_WIFI); 
    if ((netInfoMob != null || netInfoWifi != null) && (netInfoMob.isConnectedOrConnecting() || netInfoWifi.isConnectedOrConnecting())) { 
     return true; 
    } 
    return false; 
} 
1

THX艾伦^ h!

当netInfoMob和netInfoWifi之一为空而另一个不为空时,if条件可能会导致NPE。

这一次为我的作品:

netInfoMobile != null && netInfoMobile.isConnectedOrConnecting() || 
netInfoWifi != null && netInfoWifi.isConnectedOrConnecting()