wp检测是否是手机网络还是wifi网络
原文发布时间为:2013-06-22 —— 来源于本人的百度文章 [由搬家工具导入]
注意断开手机数据线进行测试,我就是被这个搞的一直忙活很长时间一直测不出来,一直都是Ethernet。。。
一、判断是否有网络数据连接:
最基本的网络状态判断,如果没有网络连接,一切操作都进行不下去啦。
Microsoft.Phone.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()
二、判断网络类型(GSM/CDMA/WIFI/Ethernet):
在一般的应用程序中,需要知道的网络状态也就三种:无网络、WIFI/Ethernet、手机网络。
三者的区别就是:
1、“无网络”:不解释,大家都懂的。
2、“WiFi/Ethernet”:一般情况下速度比手机网络快,而且不计流量,更适合进行较大数据的操作,如下载个离线地图什么的。
3、“手机网络”:2G、3G网络都算作这种吧。优点就是方便,只要手机和运营商支持,只要有信号,就有网络。缺点就是费用较高,而且速度一般情况下不如上面那种快。
我们做应用应该从用户的角度考虑,根据用户的网络环境,提供适当的服务。这就需要在应用中判断网络状态然后采取适当的操作。
publicstaticstringGetNetStates()
{
varinfo = Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType;
switch(info)
{
caseNetworkInterfaceType.MobileBroadbandCdma:
return"CDMA";
caseNetworkInterfaceType.MobileBroadbandGsm:
return"CSM";
caseNetworkInterfaceType.Wireless80211:
return"WiFi";
caseNetworkInterfaceType.Ethernet:
return"Ethernet";
caseNetworkInterfaceType.None:
return"None";
default:
return"Other";
}
}
{
varinfo = Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType;
switch(info)
{
caseNetworkInterfaceType.MobileBroadbandCdma:
return"CDMA";
caseNetworkInterfaceType.MobileBroadbandGsm:
return"CSM";
caseNetworkInterfaceType.Wireless80211:
return"WiFi";
caseNetworkInterfaceType.Ethernet:
return"Ethernet";
caseNetworkInterfaceType.None:
return"None";
default:
return"Other";
}
}
三、更细致的判断网络类型(3G/2G/WIFI/Ethernet):
在3G时代的今天,有的时候我们还需要知道用户的手机网络是3G的或是2G的。(这个方法是在MSDN论坛上看到的)
publicstaticstringNetName { get; set; }
publicstaticvoidGetNetName()
{
DeviceNetworkInformation.ResolveHostNameAsync(
newDnsEndPoint("www.baidu.com", 80),
newNameResolutionCallback(handle =>
{
NetworkInterfaceInfo info = handle.NetworkInterface;
if(info != null)
{
switch(info.InterfaceType)
{
caseNetworkInterfaceType.Ethernet:
NetName = "Ethernet";
break;
caseNetworkInterfaceType.MobileBroadbandCdma:
caseNetworkInterfaceType.MobileBroadbandGsm:
switch(info.InterfaceSubtype)
{
caseNetworkInterfaceSubType.Cellular_3G:
caseNetworkInterfaceSubType.Cellular_EVDO:
caseNetworkInterfaceSubType.Cellular_EVDV:
caseNetworkInterfaceSubType.Cellular_HSPA:
NetName = "3G";
break;
caseNetworkInterfaceSubType.Cellular_GPRS:
caseNetworkInterfaceSubType.Cellular_EDGE:
caseNetworkInterfaceSubType.Cellular_1XRTT:
NetName = "2G";
break;
default:
NetName = "None";
break;
}
break;
caseNetworkInterfaceType.Wireless80211:
NetName = "WiFi";
break;
default:
NetName = "None";
break;
}
}
else
NetName = "None";
}), null);
}
publicstaticvoidGetNetName()
{
DeviceNetworkInformation.ResolveHostNameAsync(
newDnsEndPoint("www.baidu.com", 80),
newNameResolutionCallback(handle =>
{
NetworkInterfaceInfo info = handle.NetworkInterface;
if(info != null)
{
switch(info.InterfaceType)
{
caseNetworkInterfaceType.Ethernet:
NetName = "Ethernet";
break;
caseNetworkInterfaceType.MobileBroadbandCdma:
caseNetworkInterfaceType.MobileBroadbandGsm:
switch(info.InterfaceSubtype)
{
caseNetworkInterfaceSubType.Cellular_3G:
caseNetworkInterfaceSubType.Cellular_EVDO:
caseNetworkInterfaceSubType.Cellular_EVDV:
caseNetworkInterfaceSubType.Cellular_HSPA:
NetName = "3G";
break;
caseNetworkInterfaceSubType.Cellular_GPRS:
caseNetworkInterfaceSubType.Cellular_EDGE:
caseNetworkInterfaceSubType.Cellular_1XRTT:
NetName = "2G";
break;
default:
NetName = "None";
break;
}
break;
caseNetworkInterfaceType.Wireless80211:
NetName = "WiFi";
break;
default:
NetName = "None";
break;
}
}
else
NetName = "None";
}), null);
}