你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> Windows Phone 同步方式獲取網絡類型

Windows Phone 同步方式獲取網絡類型

編輯:IOS開發綜合
在Windows Phone 開發中有時候需要獲取設備當前連接網絡的類型,是Wifi,還是2G,3G,或者4G,SDK中提供獲取網絡類型的API(Microsoft.Phone.Net.NetworkInformation. DeviceNetworkInformation),通過此API我們可以方便的獲取相關信息。但是此API是基於異步回調的方式獲取的,如果需要同步獲取,那麼就需要做一些特殊的處理。     以下代碼定義網絡類型信息類,用於存儲獲取的網絡類型信息。   復制代碼  1     /// <summary>  2     /// 網絡類型  3     /// </summary>  4     public enum NetworkType  5     {  6         None = 0,  7         Wifi = 1,       //Wifi  8         Mobile2G = 2,   //2G網絡  9         Mobile3G = 3,   //3G網絡 10         Mobile4G = 4    //4G網絡 11     } 12  13     /// <summary> 14     /// 網絡類型信息 15     /// </summary> 16     public class NetworkInfo 17     { 18         /// <summary> 19         /// 網絡接口的名稱 20         /// </summary> 21         public string InterfaceName { get; set; } 22  23         /// <summary> 24         /// 網絡接口的說明 25         /// </summary> 26         public string Description { get; set; } 27  28         /// <summary> 29         /// 網絡類型 30         /// </summary> 31         public NetworkType InterfaceType { get; set; } 32     } 復制代碼       以下代碼將從系統NetworkInterfaceInfo解析獲取網絡類型信息並寫入到上面構造的NetworkInfo類中。   復制代碼  1         private static NetworkInfo parseNetworkInfo(NetworkInterfaceInfo info)  2         {  3             NetworkInfo netInfo = new NetworkInfo();  4             if (info != null)  5             {  6                 netInfo.InterfaceName = info.InterfaceName;  7                 netInfo.Description = info.Description;  8                 switch (info.InterfaceType)  9                 { 10                     case NetworkInterfaceType.MobileBroadbandCdma: 11                     case NetworkInterfaceType.MobileBroadbandGsm: 12                         switch (info.InterfaceSubtype) 13                         { 14                             case NetworkInterfaceSubType.Cellular_GPRS: 15                             case NetworkInterfaceSubType.Cellular_1XRTT: 16                             case NetworkInterfaceSubType.Cellular_EDGE: 17                                 netInfo.InterfaceType = NetworkType.Mobile2G; 18                                 break; 19                             case NetworkInterfaceSubType.Cellular_3G: 20                             case NetworkInterfaceSubType.Cellular_EVDO: 21                             case NetworkInterfaceSubType.Cellular_EVDV: 22                             case NetworkInterfaceSubType.Cellular_HSPA: 23                                 netInfo.InterfaceType = NetworkType.Mobile3G; 24                                 break; 25                             case NetworkInterfaceSubType.Cellular_LTE: 26                             case NetworkInterfaceSubType.Cellular_EHRPD: 27                                 netInfo.InterfaceType = NetworkType.Mobile4G; 28                                 break; 29                             default: 30                                 netInfo.InterfaceType = NetworkType.None; 31                                 break; 32                         } 33                         break; 34                     case NetworkInterfaceType.Wireless80211: 35                         netInfo.InterfaceType = NetworkType.Wifi; 36                         break; 37                     default: 38                         netInfo.InterfaceType = NetworkType.None; 39                         break; 40                 } 41             } 42             return netInfo; 43         } 復制代碼   關於NetworkInterfaceInfo. NetworkInterfaceSubType的各種網絡類型的說明給出以下表格:   網絡類型   說明   Unknown   沒有有關網絡接口類型的其他信息。   Cellular_GPRS   使用通用分組無線業務 (General Packet Radio Service, GPRS) 蜂窩技術的網絡接口。這是 2.5G 技術。   Cellular_1XRTT   使用無線傳輸技術 (Radio Transmission Technology, 1xRTT) 蜂窩技術的網絡接口。這是 2.5G 技術。   Cellular_EVDO   Evolution Data Only (EV-DO) 蜂窩技術的網絡接口。這是 3G 技術。   Cellular_EDGE   使用增強型數據速率 GSM 演進 (Enhanced Data   rates for GSM Evolution, EDGE) 蜂窩技術的網絡接口。這是2.5G 技術。   Cellular_3G   使用第三代 (3G) 蜂窩技術的網絡接口。   Cellular_HSPA   使用高速下行分組接入 (High-Speed Downlink Packet Access, HSPA) 蜂窩技術的網絡接口。這是 3.5G 技術。   Cellular_EVDV   使用數據和語音演進 (Evolution Data and Voice, EV-DV) 蜂窩技術的網絡接口。這是 3G 技術。   Desktop_PassThru   桌面 pass- through 網絡接口。   WiFi   使用無線技術 (802.11) 的網絡接口。   Cellular_LTE   使用長期進化 (Long Term Evolution,LTE) 蜂窩技術的網絡接口。這是 4G 技術。   Cellular_EHRPD   使用增強型高速率數據包 (Enhanced High Rate Packet Data,EHRPD) 蜂窩技術的網絡接口。這是 4G 技術。         下面給出通過回調的方式獲取網絡類型信息的實現方式。   復制代碼  1         public static NetworkInfo NetInfo = null;  2         public static void getNetworkType()  3         {  4             DeviceNetworkInformation.ResolveHostNameAsync(  5             new DnsEndPoint("www.microsoft.com", 80),  6             new NameResolutionCallback(handle =>  7             {  8                 NetworkInterfaceInfo info = handle.NetworkInterface;  9                 NetInfo = parseNetworkInfo(info); 10             }), null); 11         } 復制代碼       下面給出如何將基於異步回調的方式轉換為同步方式來獲取網絡類型信息,此種轉換方式不僅僅只用於此處,對於所有的基於異步回調的處理都可以安裝此種處理來轉換成同步獲取。實例代碼如下:   復制代碼  1         public static async Task<NetworkInfo> getNetworkTypeAsync()  2         {  3             NetworkInfo result = await Task.Factory.StartNew<NetworkInfo>(() =>  4             {  5                 NetworkInfo netInfo = null;  6                 EventWaitHandle Wait = new AutoResetEvent(false);  7                 DeviceNetworkInformation.ResolveHostNameAsync(  8                 new DnsEndPoint("www.microsoft.com", 80),  9                 new NameResolutionCallback(handle => 10                 { 11                     NetworkInterfaceInfo info = handle.NetworkInterface; 12                     netInfo = parseNetworkInfo(info); 13                     Wait.Set(); 14  15                 }), null); 16                 Wait.WaitOne(); 17                 return netInfo; 18             }); 19             return result; 20         }
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved