2012-01-09 80 views
0

我在使用設備上的靜態IP時檢測Internet連接的問題很少。雖然我沒有設置任何靜態IP連接我的功能來檢測可用的連接工作正常。但是,當我設置靜態IP時,該函數返回true,因爲我連接到Wifi或3G,但我沒有任何互聯網連接,所以我的應用程序在這種情況下崩潰。任何想法如何解決這個問題,同時使用靜態IP? 這裏是我使用的是什麼:使用靜態IP時的Android校驗網絡連接

public boolean chkNetworkStatus(Context context) { 
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (connectivity == null) { 
     Toast.makeText(context, "No available connection!", Toast.LENGTH_LONG); 
    } else { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
     if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
        return true; 
       } 
      } 
     } 
    } 
    return false; 
} 
+0

你的粘貼代碼是正確的,所以可能是你的問題不在這裏。 – idiottiger 2012-01-09 08:39:30

+0

它不在代碼中。當我不使用靜態IP時,一切正常,但如果我設置了使用靜態選項,我甚至不能在設備上打開網站,但網絡檢查通過時是正確的,因爲我已連接到Wifi或3G,但我無法訪問互聯網。這就是它崩潰的原因。 – 2012-01-09 08:59:41

+0

信息[I] .getState()== NetworkInfo.State.CONNECTED只檢查連接在'網絡,但是不能識別可以連接到web', 公共布爾isConnected() 自:API級別1 指示是否存在網絡連接,並且可以建立連接並傳遞數據。 – idiottiger 2012-01-09 09:13:43

回答

0

這裏是你可以在你的情況下使用什麼。如果連接到wifi/3G,此功能將返回true,您可以加載任何網頁。

public static boolean isOnline(Context context) { 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
      return true; 
     } 
     return false; 
    } 

    public static boolean chkNetworkStatus(Context context) { 
    boolean result = false; 
    new Thread() { 
     @Override 
     public void run() { 


      for(int i=0;i<3;i++){ 
      HttpGet requestForTest = new HttpGet("http://m.google.com"); 
      try { 
        new DefaultHttpClient().execute(requestForTest); 
        responded = true; 
       } catch (Exception e) { 
        responded = false; 
       } 
      } 
     } 
    }.start(); 
    boolean isOnline = isOnline(context); 
    if(responded && isOnline){ 
     result = true; 
    } else { 
     result = false; 
    } 

    Log.e("","responded : "+responded); 
    return result; 
} 
0

使用此方法....我希望它會有益爲您服務。

公共布爾checkNetworkConnection(上下文的背景下){

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

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 

    if (activeNetwork != null) { 
     return activeNetwork.isConnectedOrConnecting(); 
    } 

    NetworkInfo wifiNetwork = cm 
      .getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    if (wifiNetwork != null) { 
     return wifiNetwork.isConnectedOrConnecting(); 
    } 

    NetworkInfo mobileNetwork = cm 
      .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
    if (mobileNetwork != null) { 
     return mobileNetwork.isConnectedOrConnecting(); 
    } 

    NetworkInfo otherNetwork = cm.getActiveNetworkInfo(); 
    if (otherNetwork != null) { 
     return otherNetwork.isConnectedOrConnecting(); 
    } 
    return false; 
}