如何使用C#检查Windows Phone 7中的3G,wifi,EDGE,蜂窝网络?
答案 0 :(得分:6)
如果您可以使用Mango(7.1)SDK,并且您的方案涉及使用套接字,那么获取刚刚建立的连接的NetworkInterfaceType / SubType信息的方法很简单:
NetworkInterfaceInfo netInterfaceInfo = socket.GetCurrentNetworkInterface();
var type = netInterfaceInfo.InterfaceType;
var subType = netInterfaceInfo.InterfaceSubtype;
无需使用NetworkInterface.NetworkInterfaceType属性(众所周知,最多需要30秒才能返回);不需要触发主机名解析只是为了确定网络类型;无需收听网络变更事件。
当然,这最适合与DeviceNetworkInformation.IsNetworkAvailable或NetworkInterface.GetIsNetworkAvailable()一起使用 - 无论您是否在网络上,这些调用都会立即返回。如果是,请先连接套接字并在连接时提出问题: - )
最后一点:提防Mango的DeviceNetworkInformation.IsWiFiEnabled - 我认为无论我是否在wifi网络上都会返回,但它会返回无论是在手机设置中打开还是关闭wifi ...都不是非常有用。 / p>
答案 1 :(得分:2)
看看手机工具,他们有类PhoneNetworking:
http://wildermuth.com/2011/03/05/Phoney_Tools_Updated_(WP7_Open_Source_Library)
它的开源你可以检查源代码
答案 2 :(得分:2)
自Mango发布(测试版2和RC)以来,此信息现已可用,但它需要您实际建立连接,大概是因为它不需要检查直到需要它。
您可以执行DNS解析(请参阅下文)或使用GetCurrentNetworkInterface
WebRequest扩展方法,如果请求尚未连接,则会抛出InvalidOperationException。
在Microsoft.Phone.Net.NetworkInformation
命名空间中还有一些事件需要遵循,但如果在建立连接之前这些事件没有触发,我不会感到惊讶。
有趣的是,您似乎也可以使用SetNetworkPreference和SetNetworkRequirement扩展方法在每个连接的基础上选择或要求,但它不会超越wifi与蜂窝网络。
DeviceNetworkInformation.ResolveHostNameAsync(
new DnsEndPoint("microsoft.com", 80),
new NameResolutionCallback(nrr =>
{
var info = nrr.NetworkInterface;
var type = info.InterfaceType;
var subType = info.InterfaceSubtype;
}), null);
MSDN上提供NetworkInterfaceType
(wifi / gsm)和NetworkInterfaceSubType
(edge / 3g)的枚举值。
答案 3 :(得分:2)
没有套接字:
var currentList = new NetworkInterfaceList().Where(i => i.InterfaceState == ConnectState.Connected).Select(i => i.InterfaceSubtype);
if (currentList.Contains(NetworkInterfaceSubType.WiFi))
Debug.WriteLine("WiFi");
if (currentList.Intersect(new NetworkInterfaceSubType[]
{
NetworkInterfaceSubType.Cellular_EVDO,
NetworkInterfaceSubType.Cellular_3G,
NetworkInterfaceSubType.Cellular_HSPA,
NetworkInterfaceSubType.Cellular_EVDV,
}).Any())
Debug.WriteLine("3G");
if (currentList.Intersect(new NetworkInterfaceSubType[]
{
NetworkInterfaceSubType.Cellular_GPRS,
NetworkInterfaceSubType.Cellular_1XRTT,
NetworkInterfaceSubType.Cellular_EDGE,
}).Any())
Debug.WriteLine("2G");
答案 4 :(得分:1)
不幸的是,api没有提供有关您所拥有的网络连接类型的非常有限的信息。您可以判断您是使用3G,蜂窝电话还是以太网(即USB连接到PC),但这是您获得的所有信息。
查看此内容以获取更多信息Better way to check for an network connection on WP7
答案 5 :(得分:0)
要获取Windows Phone应用程序的网络数据,即它连接到以太网,wifi或蜂窝网络,也可以使用子类型,即2G或3g网络以下程序。
Using Microsoft.Phone.Net.NetworkInformation
Using Microsoft.Phone.net.NetworkInfromation
var Newlist = new NetworkInterfaceList();
foreach (NetworkInterfaceInfo x in Newlist)
{
if(x.InterfaceState==ConnectState.Connected)
{
if(x.InterfaceSubtype.Equals(NetworkInterfaceSubType.WiFi))
{
Interface = x.InterfaceType.ToString();
SubInterface = x.InterfaceSubtype.ToString();
break;
}
else if(x.InterfaceSubtype.Equals(NetworkInterfaceSubType.Cellular_EVDO) || x.InterfaceSubtype.Equals(NetworkInterfaceSubType.Cellular_3G) || x.InterfaceSubtype.Equals(NetworkInterfaceSubType.Cellular_HSPA) || x.InterfaceSubtype.Equals(NetworkInterfaceSubType.Cellular_EVDV))
{
Interface = x.InterfaceType.ToString();
SubInterface= “3G Network”;
break;
}
else if(x.InterfaceSubtype.Equals(NetworkInterfaceSubType.Cellular_GPRS) || x.InterfaceSubtype.Equals(NetworkInterfaceSubType.Cellular_1XRTT) || x.InterfaceSubtype.Equals(NetworkInterfaceSubType.Cellular_EDGE))
{
Interface = x.InterfaceType.ToString();
SubInterface= “2G Network”;
break;
}
else
{
Interface = “Ethernet”;
SubInterface= “Unknown” ;
break;
}
}
else
{
Interface=”not connected”;
SubInterface=”unknown”;
}
这里,Interface和SubInterface提供网络信息。