有些應用是跟網路環境敏感的,WiFi快且免費,3G走流量,GSM慢,所以我們需要知道如何判斷當前的網路類型,以及當網路類型發生改變時如何得到通知。
MSDN相關文章:How To: Detect Network Changes
下面我簡單介紹一下。
當網路發生變化時,會引髮網絡地址發生變化,要監測這一事件,需要用到位於System.Net.NetworkInformation命名空間下的NetworkChange類。
要查看網路連接的類型和狀態,用到的類都在Microsoft.Phone.Net.NetworkInformation這個命名空間裡。
注意上面兩個不同的命名空間,Microsoft.Phone.Net.NetworkInformation是專門用於手機,System.Net.NetworkInformation用於各種場合。由於這兩個類中的名字衝突很多,一起用的時候注意區分好。
網路環境變化時得到通知
只需要監聽一個事件:
NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);
……
void NetworkChange_NetworkAddressChanged(object sender, EventArgs e){ string content = string.Format( @"CellularMobileOperator {0} IsCellularDataEnabled {1} IsCellularDataRoamingEnabled {2} IsNetworkAvailable {3} IsWiFiEnabled {4}", DeviceNetworkInformation.CellularMobileOperator, // 電訊廠商名字,例如“中國移動” DeviceNetworkInformation.IsCellularDataEnabled, DeviceNetworkInformation.IsCellularDataRoamingEnabled, DeviceNetworkInformation.IsNetworkAvailable, DeviceNetworkInformation.IsWiFiEnabled); NetworkInterfaceList list = new NetworkInterfaceList(); // 獲得所有NetworkInterfaces foreach (var item in list) { string text = string.Format( @" Bandwidth {0} InterfaceName {1} InterfaceState {2} InterfaceType {3} ", item.Bandwidth, // 單位是Kbps(千位元每秒) item.InterfaceName, // 網路連接的名字 item.InterfaceState, // 枚舉 Connected/Disconnected item.InterfaceType); // 網路類型的枚舉 content += text; } textBlock_NetworkInfo.Text = content;}
經過我的測試,應用被切換到後台時網路環境發生了變化,在切換回前台運行後,也一樣能立即偵測到這個事件。
在Microsoft.Phone.Net.NetworkInformation.NetworkInterface命名空間下的NetworkInterfaceType枚舉,比較典型的值有:
- Wireless80211 -- WiFi
- Ethernet -- USB
- MobileBroadbandGSM
- MobileBroadbandCDMA
- None