如何在Windows Phone 7中检查3G,wifi,EDGE,蜂窝网络?

时间:2011-03-16 13:00:47

标签: c# windows-phone-7

如何使用C#检查Windows Phone 7中的3G,wifi,EDGE,蜂窝网络?

6 个答案:

答案 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命名空间中还有一些事件需要遵循,但如果在建立连接之前这些事件没有触发,我不会感到惊讶。

有趣的是,您似乎也可以使用SetNetworkPreferenceSetNetworkRequirement扩展方法在每个连接的基础上选择或要求,但它不会超越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提供网络信息。