2012-06-01 31 views
3

在windows phone7中,我只需要檢查互聯網連接是否可用,然後繼續下一組操作。我搜索並找到了許多POSTS中建議的3個選項。他們如下。在(a)和(b)選項中,即使當WIFI關閉並且沒有可用的互聯網連接時,它也提供TRUE作爲結果。 但是(c)提供了當互聯網不可用時的確切(真實)結果。但需要這麼多時間才能做出迴應。在此之前,應用程序被刪除...Windows phone7:檢查互聯網連接可用性

我檢查了所有這些與真正的設備(不僅與模擬器只),並努力哪種方式將是檢查設備的互聯網可用性的最佳方式。

任何建議是高度讚賞...謝謝inadvance .....

+1

我會記住的是,網絡的可用性!= Internet連接設置爲20秒的TIMEROUT萬一。您可能想ping IP地址或發送http請求。 – LukeP

回答

1

有知道該網絡可用之間的差,並且被連接到更廣泛的互聯網。 NetworkInterface.GetIsNetworkAvailable()非常快,如果網絡接口被禁用,將返回false。

如果返回的網絡可用,它只是表明您可以連接 - 與DNS查找,通過蜂窩網絡連接的速度仍然會有潛在問題(如果沒有WiFi連接),以及設備尚未連接等。

如果UI線程導致性能問題,您應該考慮將網絡訪問移出UI線程。

+0

爲什麼匿名downvote? –

+0

另一個匿名downvote? –

0

也許你可能想嘗試發送一個HttpWebRequest到一個已知的網頁,並檢查響應中的前幾個字符是否與預期的結果相匹配。您可能還想循環檢查函數幾次,直到連接測試實際獲得結果(無論成功還是失敗)。

將這個加載到與UI線程分離的線程上,然後放開它。請務必注意任何例外情況(如果由於缺乏連接或其他問題而導致測試無法解決)。我已經在我的Windows Phone 7應用程序中使用了它,但我不確定它是否是最好的想法。

1

這裏我們去用這個。我的項目中有相同的概念,我做了以下工作。希望能幫助到你。

public bool netWorkAvailable() 
    { 
     if (NetworkInterface.GetIsNetworkAvailable()) 
     { 
      Logger.log(TAG, "netWorkAvailable()"); 
      return true; 
     } 
     return false; 
    } 

if (netWorkAvailable()) 
    { 
    buffer.Append(SERVER_URL); 
    buffer.Append("_req=").Append(8); 
    httpConnection = new HttpConnection(); 
    httpConnection.connect(REQ_REGISTRATION, buffer.ToString(), listener, null); 
    httpConnection.Post(); 
    } 

我有不同的類來處理所有的httpconnection。 除了這些我也查一些其他的東西爲我的項目的目的有如下幾點:

public bool IsWifiAvailable() 
    { 
    if ((NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)) 
     { 
      return true; 
     } 
    else 
     { 
     return false; 
     } 
    } 

    public bool threeGkAvailable() 
    { 
     if ((NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.MobileBroadbandCdma) 
        || (NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.MobileBroadbandGsm)) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 

     } 
    } 
+0

這仍然不會告訴您您連接的網絡是否連接到Internet。考慮一下你在家裏的情況,移動覆蓋很差,並且ADSL下降。我仍然連接到WiFi,但不是互聯網...... –

0

您可以檢查用戶是否通過請求使用WebClient的網頁連接到互聯網或沒有。

WebClient client = new WebClient(); 
     client.DownloadStringCompleted += (s, e) => 
     { 
      if (e.Error == null && !e.Cancelled) 
      { 
       //completed.TrySetResult(true); 
       MessageBox.Show("Internet Connected", "True", MessageBoxButton.OK); 
      } 
      else 
      { 
       //completed.TrySetResult(false); 
       MessageBox.Show("Internet Not Connected", "False", MessageBoxButton.OK); 
      } 
     }; 
     client.DownloadStringAsync(new Uri("http://www.google.com/")); 

您也可以,如果有非常