2012-09-04 186 views
1

我正在开发一个需要检查网络连接的Android应用程序。当设备的WI-FI关闭时,它工作得很好,但是当我打开Wi-Fi时,但是不要连接到可用的网络,这是力closing.What可能是问题?请帮助 布尔isNetworkConnectionAvailable(){无线网络已连接但未连接到网络

boolean connected = false; 

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

    if (cm != null) { 
     NetworkInfo ni = cm.getActiveNetworkInfo(); 

     if(ni != null){ 

       if(ni.isConnected()) 
       connected = true; 
       else 
        connected=false; 

      } 

    } 



    return connected; 

}

+0

什么是例外? – Abhi

+0

我看不到例外,因为无法在模拟器上测试应用程序。 –

回答

5

你的问题是你返回true当你的遗赠是连接到WIFI,但WIFI不连接到internet.You可以通过执行ping命令以编程方式解决此问题。

想法:

1)检查你的连接到WIFI。

2)如果你连接到wifi ping来检查网络可用性。

代码:

public static boolean isOnline(Context con,String url){ 

    ConnectivityManager cm = (ConnectivityManager)con.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     if(u!=null){ 
      return ping(url); 
     }else{ 
      return true; 
     } 
    }else{ 
     return false; 
    } 
} 

Ping方法:

public static boolean ping(String u) { 
     try { 
      URL url = new URL(u); 
      HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
      urlc.setConnectTimeout(500); // Time is in Milliseconds to wait for ping response 
      urlc.connect(); 
      if (urlc.getResponseCode() == 200) { 
       Log.i(TAG, "* ping with ResponseCode: "+urlc.getResponseCode()); 
       return true; 
      }else{ 
       Log.i(TAG, "* Connection is too slow with ResponseCode: "+urlc.getResponseCode()); 
       return false; 
      } 
     }catch (MalformedURLException e1){ 
      Log.e(TAG,"Erroe in URL to ping"+e1); 
      return false; 
     }catch (IOException e){ 
      Log.e(TAG,"Error in ping"+e); 
      return false; 
     } 
    } 
+0

其实我的WI-FI连接需要证书。如果我穿上我的WI-FI并且不输入证书,我将无法访问internet.That是它给予例外的地方。如果我关闭wi-fi,我的代码是完美的工作,但当我打开WI-FI,不输入凭据,因为我还没有连接到互联网,所以它应该返回false,但它只返回true.Thank你的回应,但我只是想给互联网连接不可用的用户发消息。 –

+0

作为一名程序员,您不应该担心用户网络连接到用户。程序员必须做的是以编程方式处理不可用的可用性,以上代码将解决该问题。如果返回false,则必须根据上述代码向用户发送有关网络可用性的通知。 –

+0

但是,如果我启动WI-FI,并且没有与互联网通话的连接,则URL会给我一个异常。我想要做的是如果设备未连接,则不应该调用url而不是提供异常。在调用google页面时, –