2011-06-02 231 views
0

我使用下面的代码来查看用户是否有互联网连接(WIFI或3G或Edge)。 为什么有些用户在拥有“没有互联网连接”?android网络连接

try{ 
    ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
      State wifi = connec.getNetworkInfo(1).getState(); 

    if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || 
    connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING || 
    wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) { 
    ///HAVE CONNECTION CODE//// 
      }else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) { 
    ///NO CONNECTION CODE/// 
    } 
} catch (Throwable t){ 
///NO CONNECTION CODE/// 
} 

回答

1

我的猜测是connec.getNetworkInfo(0)connec.getNetworkInfo(1)并不总是有效的WiFi/3G网络接口。尝试检查接口的'TypeName'。我用这个代码...

public boolean HaveNetworkConnection() { 
    boolean HaveConnectedWifi = false; 
    boolean HaveConnectedMobile = false; 

    ConnectivityManager connManager = (ConnectivityManager) appContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] netInfo = connManager.getAllNetworkInfo(); 
    for (NetworkInfo ni : netInfo) { 
     Log.d("HaveNetworkConnection()", ni.toString()); 
     if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
      if (ni.isConnected()) 
       HaveConnectedWifi = true; 
     if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
      if (ni.isConnected()) 
       HaveConnectedMobile = true; 
    } 
    return HaveConnectedWifi || HaveConnectedMobile; 
}