原文:Windows Phone 同步方式获取网络类型

  在Windows Phone 开发中有时候需要获取设备当前连接网络的类型,是Wifi,还是2G,3G,或者4G,SDK中提供获取网络类型的API(Microsoft.Phone.Net.NetworkInformation. DeviceNetworkInformation),通过此API我们可以方便的获取相关信息。但是此API是基于异步回调的方式获取的,如果需要同步获取,那么就需要做一些特殊的处理。

  以下代码定义网络类型信息类,用于存储获取的网络类型信息。

     /// <summary>
/// 网络类型
/// </summary>
public enum NetworkType
{
None = ,
Wifi = , //Wifi
Mobile2G = , //2G网络
Mobile3G = , //3G网络
Mobile4G = //4G网络
} /// <summary>
/// 网络类型信息
/// </summary>
public class NetworkInfo
{
/// <summary>
/// 网络接口的名称
/// </summary>
public string InterfaceName { get; set; } /// <summary>
/// 网络接口的说明
/// </summary>
public string Description { get; set; } /// <summary>
/// 网络类型
/// </summary>
public NetworkType InterfaceType { get; set; }
}

  以下代码将从系统NetworkInterfaceInfo解析获取网络类型信息并写入到上面构造的NetworkInfo类中。

         private static NetworkInfo parseNetworkInfo(NetworkInterfaceInfo info)
{
NetworkInfo netInfo = new NetworkInfo();
if (info != null)
{
netInfo.InterfaceName = info.InterfaceName;
netInfo.Description = info.Description;
switch (info.InterfaceType)
{
case NetworkInterfaceType.MobileBroadbandCdma:
case NetworkInterfaceType.MobileBroadbandGsm:
switch (info.InterfaceSubtype)
{
case NetworkInterfaceSubType.Cellular_GPRS:
case NetworkInterfaceSubType.Cellular_1XRTT:
case NetworkInterfaceSubType.Cellular_EDGE:
netInfo.InterfaceType = NetworkType.Mobile2G;
break;
case NetworkInterfaceSubType.Cellular_3G:
case NetworkInterfaceSubType.Cellular_EVDO:
case NetworkInterfaceSubType.Cellular_EVDV:
case NetworkInterfaceSubType.Cellular_HSPA:
netInfo.InterfaceType = NetworkType.Mobile3G;
break;
case NetworkInterfaceSubType.Cellular_LTE:
case NetworkInterfaceSubType.Cellular_EHRPD:
netInfo.InterfaceType = NetworkType.Mobile4G;
break;
default:
netInfo.InterfaceType = NetworkType.None;
break;
}
break;
case NetworkInterfaceType.Wireless80211:
netInfo.InterfaceType = NetworkType.Wifi;
break;
default:
netInfo.InterfaceType = NetworkType.None;
break;
}
}
return netInfo;
}

  关于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 技术。

  下面给出通过回调的方式获取网络类型信息的实现方式。

         public static NetworkInfo NetInfo = null;
public static void getNetworkType()
{
DeviceNetworkInformation.ResolveHostNameAsync(
new DnsEndPoint("www.microsoft.com", ),
new NameResolutionCallback(handle =>
{
NetworkInterfaceInfo info = handle.NetworkInterface;
NetInfo = parseNetworkInfo(info);
}), null);
}

  下面给出如何将基于异步回调的方式转换为同步方式来获取网络类型信息,此种转换方式不仅仅只用于此处,对于所有的基于异步回调的处理都可以安装此种处理来转换成同步获取。实例代码如下:

         public static async Task<NetworkInfo> getNetworkTypeAsync()
{
NetworkInfo result = await Task.Factory.StartNew<NetworkInfo>(() =>
{
NetworkInfo netInfo = null;
EventWaitHandle Wait = new AutoResetEvent(false);
DeviceNetworkInformation.ResolveHostNameAsync(
new DnsEndPoint("www.microsoft.com", ),
new NameResolutionCallback(handle =>
{
NetworkInterfaceInfo info = handle.NetworkInterface;
netInfo = parseNetworkInfo(info);
Wait.Set(); }), null);
Wait.WaitOne();
return netInfo;
});
return result;
}

Windows Phone 同步方式获取网络类型的更多相关文章

  1. iOS获取网络类型的四种方法

    Reachability类只能区分WIFI和WWAN类型,却无法区分2G网和3G网. 网上也有些方法,却都存在Bug. 经过网上查找资料和测试,基本上总结了以下几种方法: 1.使用导航栏的方式:(私有 ...

  2. 如何在silverlight中以同步方式 获取sharepoint2013站点的当前登录账号

    最近有个项目用到了silverlight要同步方式获取当前登录账号.异步的方式无法跟其他应用结合.主要先后顺序问题.但是silverlight非常不好获取到当前登录账号.即使获取到了也是异步方式获取. ...

  3. iOS:关于获取网络类型和运营商信息

    目录 1. 获取运营商网络类型 2. 获取运营商信息 返回目录 1. 获取运营商网络类型 Apple的Reachability Sample看起来不错,但是只可以判断是否连接到互联网和是否连接Wifi ...

  4. Android 获取网络类型

    获取网络类型 public class IntenetUtil { //没有网络连接 public static final int NETWORN_NONE = 0; //wifi连接 public ...

  5. Android获取网络类型

    public static final String NETWORK_CLASS_UNKNOWN = "unknown"; public static final String N ...

  6. Android检测网络是否可用并获取网络类型

    在类中使用getSystemService的时候需要这样进行使用:1. public class JajaMenu extends Activity { public static JajaMenu ...

  7. Windows Phone 获取网络类型(GSM/CDMA/WIFI/Ethernet)

    一.判断是否有网络数据连接: 最基本的网络状态判断,如果没有网络连接,一切操作都进行不下去啦. Microsoft.Phone.Net.NetworkInformation.NetworkInterf ...

  8. Http方式获取网络数据

    通过以下代码可以根据网址获取网页的html数据,安卓中获取网络数据的时候会用到,而且会用Java中的sax方式解析获取到数据.(sax解析主要是解析xml)具体代码如下: package com.wy ...

  9. Android简易实战教程--第四十七话《使用OKhttp回调方式获取网络信息》

    在之前的小案例中写过一篇使用HttpUrlConnection获取网络数据的例子.在OKhttp盛行的时代,当然要学会怎么使用它,本篇就对其基本使用做一个介绍,然后再使用它的接口回调的方式获取相同的数 ...

随机推荐

  1. ConditonHelper

    在网上其实已经有很多类似这种拼接sql条件的类,但是没有看到一个让我感觉完全满意的这样的类.最近看到 http://www.cnblogs.com/xtdhb/p/3811956.html 这博客,觉 ...

  2. Linux scp文件复制

    scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.  1.scp命令的用处:  scp在网络上不同的主机之间复制文件,它使用ssh安全协议传输 ...

  3. IIS设置允许下载.exe文件解决方法

    最近很多客户使用IIS服务器,然后提示返现宝下载无法找到等无法下载的问题. 返现宝是.exe安装文件,部分服务器或主机可能无法下载. 第一.如果是自己服务器或VPS请按如下设置: 1.设置MIME,让 ...

  4. Linux内核IP层的报文处理流程(一)

    本文主要讲解了Linux内核IP层的整体架构和对从网卡接受的报文处理流程,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式对Linxu内核中IP整体实现架构和对网卡 ...

  5. 使用SharePoint管理中心管理服务

    使用SharePoint管理中心管理服务 为了管理服务应用程序.场管理员要么使用管理中心,要么使用PowerShell. 管理服务应用程序页面列出了场上执行的服务.你能够管理他们. 很多服务都有自己的 ...

  6. FREESWITCH SEESION

    SESSION SESSION为FS的核心概念之一,所以需要拿出来专门的分析下. 从以下几个方面进行分析,结构类型,资源的管理,对于呼叫的意义,规格. 1.结构类型 每一次呼叫会申请一个session ...

  7. hdu1664 Different Digits

    求出n的倍数m,要求m使用的不同数字最少,且最小. 一开始不知道怎么搜,因为不知道m由多少个不同的数字组成. 然后百度了一下,看到和数论有关. m可能使用的数字的个数可能为一个或者两个 a,aa,aa ...

  8. android 读,写图片sd网卡资源

    <pre name="code" class="html"><!--<span style="font-family: Ari ...

  9. 发现C++Builder 2010一组类BUG

        今天C++Builder 2010写小码,我们用一个集合类.您可以设置操作结果是不正确的,排除其他原因引起的,最后,它应该被设置以确定问题类的源,以下是一个集合类测试代码: enum TTes ...

  10. 【HTML+CSS】(1)基本语法

    HTML基金会 <em>他强调标签,<strong>加粗标签 <q>短文本引用.<blockquote>长文本引用,这两个标签会让文字带双引號.   空 ...