Windows Phone 8 擷取與監聽網路連接狀態

來源:互聯網
上載者:User

現在的只能手機對網路的依賴程度都很高,尤其是新聞、微博、音樂、視頻、VOIP通話、遊戲等 事實性高的資訊類應用,但是目前國內的資訊費仍然高居不下,更多的使用者只有在 WIFI 的環境下才願意進行大資料量的流量從而節約流量費用。然而為了使我們的應用更加貼心、更加人性化,如何讓我們的應用為使用者省錢呢?今天為大家介紹下如何在 Windows Phone8 中擷取和監聽網路連接狀態。

首先在Windows Phone中可以使用 Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType 來擷取應用的網路連接狀態。

public static string GetNetStates() {     var info = Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType;    switch (info)     {         case NetworkInterfaceType.MobileBroadbandCdma:             return "CDMA";         case NetworkInterfaceType.MobileBroadbandGsm:             return "CSM";         case NetworkInterfaceType.Wireless80211:             return "WiFi";         case NetworkInterfaceType.Ethernet:             return "Ethernet";         case NetworkInterfaceType.None:             return "None";         default:             return "Other";     }     //return null; }

 

通過以上代碼肯定有同學覺得不夠,因為不能看到當前的串連究竟是一個 2G 3G 甚至是4G的串連,WIFI 串連的是什麼狀態。

這時候我們可以通過 DeviceNetworkInformation.ResolveHostNameAsync 來訪問一個串連擷取更多資訊。

 

public void GetNetName() {     DeviceNetworkInformation.ResolveHostNameAsync(         new DnsEndPoint("www.microsoft.com", 80),         new NameResolutionCallback(handle =>         {             NetworkInterfaceInfo info = handle.NetworkInterface;             if (info != null)             {                 Name = info.InterfaceName + " " + info.Description + " ";                switch (info.InterfaceType)                 {                     case NetworkInterfaceType.Ethernet:                         NetName = "Ethernet";                         break;                     case NetworkInterfaceType.MobileBroadbandCdma:                     case NetworkInterfaceType.MobileBroadbandGsm:                         switch (info.InterfaceSubtype)                         {                             case NetworkInterfaceSubType.Cellular_3G:                                 NetName = "Cellular_3G + 3G";                                 break;                             case NetworkInterfaceSubType.Cellular_EVDO:                                 NetName = "Cellular_EVDO + 3G";                                 break;                             case NetworkInterfaceSubType.Cellular_EVDV:                                 NetName = "Cellular_EVDV + 3G";                                 break;                             case NetworkInterfaceSubType.Cellular_HSPA:                                 NetName = "Cellular_HSPA + 3G";                                 break;                             case NetworkInterfaceSubType.Cellular_GPRS:                                 NetName = "Cellular_GPRS + 2G";                                 break;                             case NetworkInterfaceSubType.Cellular_EDGE:                                 NetName = "Cellular_EDGE + 2G";                                 break;                             case NetworkInterfaceSubType.Cellular_1XRTT:                                 NetName = "Cellular_1XRTT + 2G";                                 break;                             default:                                 NetName = "None";                                 break;                         }                         break;                     case NetworkInterfaceType.Wireless80211:                         NetName = "WiFi";                         break;                     default:                         NetName = "None";                         break;                 }             }             else                 NetName = "None";            Deployment.Current.Dispatcher.BeginInvoke(delegate() { MessageBox.Show(Name + NetName); });             //MessageBox.Show(NetName);        }), null); }

 

相信以上資訊 相信已經有很多朋友再應用中已經使用了 我在這裡給大家總結一下,其次還有一個情境就是在網路條件發生變化的時候,比在從室內走到室外, WIFI 條件下自動切換到蜂窩網串連。

這裡在我們的模擬器中也可以類比這個情境 VS- tools – simulation dashboard.

其次我們要在 APP 的 Launching 的事件中註冊監聽NetworkInformation.NetworkStatusChanged 事件激發這個事件的條件分別是:

  1. 當手機和 Wi-Fi 之間的連線類型改變時。
  2. 當使用者進入或離開漫遊狀態時。
  3. 當 ApproachingDataLimit 或 OverDataLimit 變為 true 時。
// Code to execute when the application is launching (eg, from Start) // This code will not execute when the application is reactivated private void Application_Launching(object sender, LaunchingEventArgs e) {     NetworkInformation.NetworkStatusChanged += (object sener) =>     {         Deployment.Current.Dispatcher.BeginInvoke(delegate() { MessageBox.Show("NetworkStatusChanged"); });     }; }

 

另外我們可以在 NetworkStatusChanged  之後擷取 NetworkInformation 類的靜態 GetInternetConnectionProfile方法

NetworkCostType CostType = NetworkInformation.GetInternetConnectionProfile().GetConnectionCost().NetworkCostType;

 

 

可以依據下表資料連線狀態對應用進行最佳化處理。

 

歡迎大家在這裡和我溝通交流或者在新浪微博上 @王博_Nick

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.