2013-01-22 225 views
3

我用這個代碼來檢查網絡是否可用不可用..如何檢查網絡在WiFi(無線上網雖然連接)

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 && info[i].isAvailable()) 

     { 
      return true; 
     } 
    } 
    return false; 

但我想要的是:

假設無線網絡連接連接但沒有互聯網在WiFi ...如何檢查互聯網數據是可用的WiFi eventhough無線連接..如果我使用abouve代碼它只是檢查無線連接或斷開..它將是感恩,如果有人給我一個解決方案...

+0

順便說一句,你可以通過輕鬆使用谷歌找到答案。在stackoverflow中也有很多類似的問題。 – VendettaDroid

回答

3

最簡單的事情就是發送http請求如果你的http請求超時,那麼你沒有互聯網連接,或者你可以檢查更多的響應代碼。您提到的情況發生在您連接到WiFi但WiFi路由器沒有與ISP有效連接時。最好的事情是依靠http請求imo。

下面是示例代碼:

try 
    { 

    HttpGet request = new HttpGet(url)); 
    HttpParams httpParameters = new BasicHttpParams(); 
    // Set the timeout in milliseconds until a connection is established. 
    // The default value is zero, that means the timeout is not used. 
    int timeoutConnection = 60000; 
    HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
    // Set the default socket timeout (SO_TIMEOUT) 
    // in milliseconds which is the timeout for waiting for data. 
    int timeoutSocket = 60000; 
    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 
    // create object of DefaultHttpClient  
    DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters); 
    request.addHeader("Content-Type", "application/json"); 
    HttpResponse response = httpClient.execute(request); 
    // get response entity 
    HttpEntity entity = response.getEntity(); 
    // convert entity response to string 

    if (entity != null) 
     { 
     result = EntityUtils.toString(entity); 
     } 

    } 
catch (SocketException e) 
    { 
    return "-222" + e.toString(); 
    } 
catch (Exception e) 
    { 
    return "-333" + e.toString(); 
    } 
+0

謝謝VendettaDroid:讓我檢查這個.. –

+0

如果你找到你的答案。只要接受它,它會讓你接受比例。 – VendettaDroid

-1

試試下面的代碼: -

public static 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; 
    } 
} 
+0

HCD:其實Wifi已連接...所以此代碼將返回true。如果沒有互聯網連接到WiFi,但WiFi連接到device.device juz檢查無線連接與否。 –

1

是VendettaDroid是正確的。

也在這裏是代碼來檢查無線網絡連接和檢查飛行模式的ON/OFF,如果你是一個Web應用程序,然後飛行模式必須處理

// Check Flight mode ON/OFF 
    if (Settings.System.getInt(context.getContentResolver(), 
      Settings.System.AIRPLANE_MODE_ON, 0) == 0) { 

// Flight mode ON not able to access internet 
} 

檢查無線網絡連接和網絡可用性

ConnectivityManager cm; 
cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
if (cm.getActiveNetworkInfo() != null 
       && cm.getActiveNetworkInfo().isAvailable() 
       && cm.getActiveNetworkInfo().isConnected()) { 

// Internet is availble. 
} 
0

多謝提示我...

我居然發現了一些solutios:

我曾經嘗試\美中不足的是:在Play商店 https://play.google.com/store/apps/details?id=com.mobilefree

NetworkInfo.isAvailable

try{ 
    //calling url 
    } 
    catch(UnknownHostException e){ 

    e.printStackTrace(); 

    Connection_error();  
    } 

    catch (ConnectException e) { 
    e.printStackTrace(); 
    Connection_error(); 
      } 

感謝所有...

1

通過這只是工作了最新的標題 「手機免費」( )只是告訴你是否有物理網絡可供連接。 NetworkInfo.isConnected()只會告訴您您已連接到物理網絡。

物理網絡可以是WIFI,MOBILE,ETHER等傳輸層。

僅僅因爲您連接到網絡並不意味着網絡具有互聯網(應用程序層)。

網絡可以有各種應用協議。 TCP,DNS和HTTP並不是唯一的。

檢查實際的互聯網可用性實際上是相當困難的機器人。 要做到這一點,有許多限制要克服。

isReachable()方法使用ICMP來ping主機。這可能很難建立。

同樣,調用一個URL可以是同樣的限制,根據設備,權限,API,操作系統版本等

如果你沒有這樣做,不上。沒有可靠的方法可以在所有設備上使用。

這不是「移動免費」的核心用例,它只管理移動計費(開/關)。

有趣的是,你可以實際上在移動設備上,但沒有互聯網,仍然可以計費。

0

您可以閱讀wifi current state..

SupplicantState supState; 
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
supState = wifiInfo.getSupplicantState(); 

也看看this approach

相關問題