2013-02-21 77 views
3

我正在使用以下代碼來確定手機是否連接到互聯網。Android Internet連接檢查失敗

public static boolean isOnline(Context context) { 
    try { 
     ConnectivityManager cm = (ConnectivityManager) 
     context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 
    } catch(Exception e) { 
     return false; 
    } 
} 

與此檢查,當手機連接家庭無線網絡,但請注意,沒有互聯網連接,仍然這種方法返回我的真實。這導致我的應用程序崩潰,因爲當它試圖假設互聯網在那裏的代碼,我可以進一步的異常處理,以防止崩潰,但我需要一個更好的方式來檢查互聯網連接,它可以返回實際的互聯網連接狀態...

回答

0

使用此:

public boolean isConnected() { 
     boolean conectado; 
     if (conectivtyManager.getActiveNetworkInfo() != null 
       && conectivtyManager.getActiveNetworkInfo().isAvailable() 
       && conectivtyManager.getActiveNetworkInfo().isConnected()) { 
      conectado = true; 
     } else { 
      conectado = false; 
     } 
     return conectado; 
    } 

將這個權限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
+0

仍然不工作,同樣的事情正在發生。 – Amol 2013-02-21 19:17:55

+0

不要忘記權限,同時檢查漫遊可能是一個好主意。看到我的答案。 – Timmetje 2013-02-21 19:21:21

+0

我已經添加了權限......當我切換到手機上的wi-fi時,它告訴我沒有互聯網,但是當我連接它時,雖然沒有互聯網,但它說有 – Amol 2013-02-21 19:26:37

0

我總是用:

public static boolean isOnline(Context ctx) { 

    NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 
    if (info == null || !info.isConnected()) { 
     return false; 
    } 
    if (info.isRoaming()) { 
     // here is the roaming option you can change it if you want to 
     // disable internet while roaming, just return false 
     return false; 
    } 
    return true; 
} 

如果設備在漫遊,還有額外的檢查,當true,它表明在這個網絡上使用數據可能會產生額外的成本。

不要忘了正確的權限添加到您的清單中<application>標籤外:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

我不認爲漫遊是一個問題。無論如何,我試過你的方式,但沒有運氣。 – Amol 2013-02-21 19:23:19

+0

你可能想發佈你的DDMS日誌。這應該工作。你有添加權限嗎? – Timmetje 2013-02-21 19:27:32

+0

已添加 \t Amol 2013-02-21 19:41:31

0

這爲我工作:

public boolean networkCheckIn(){ 
try{ 

ConnectivityManager networkInfo = (ConnectivityManager) getSystemService(MapViewActivity.CONNECTIVITY_SERVICE) ; 
networkInfo.getActiveNetworkInfo().isConnectedOrConnecting() ; 

Log.d("1", "Net avail:" 
       + networkInfo.getActiveNetworkInfo().isConnectedOrConnecting()); 

ConnectivityManager cm = (ConnectivityManager) getSystemService(MapViewActivity.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
    //Log.d("2", "Network available:true"); 
    return true; 

    } else { 
      //Log.d("3", "Network available:false"); 
      return false; 
    } 

}catch(Exception e){ 
     return false ; 
} 
} 
0

你的問題是方法getActiveNetworkInfo()

一個例子,得到的Wi-Fi的網絡狀態:

public static boolean isWifiAvailable(Context context) { 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (cm == null) 
     return false; 

    NetworkInfo[] networkInfos = cm.getAllNetworkInfo(); 
    for (NetworkInfo ni : networkInfos) { 
     if (ni.getType() == ConnectivityManager.TYPE_WIFI && ni.isConnected()) 
      return true; 
    } 
    return false; 
}// isWifiAvailable() 

有在ConnectivityManager更多類型的(他們開始TYPE_*)。