How can I check for 3G, wifi, EDGE, Cellular Netwo

2019-01-23 18:42发布

How can I check for 3G, wifi, EDGE, Cellular Networks in Windows Phone 7 using C#?

6条回答
淡お忘
2楼-- · 2019-01-23 19:16

To get Network Data for windows phone app i.e it is connected to a ethernet, wifi or cellular network also getting the subtype i.e 2G or 3g network following program can be used.

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”;

}

Here, Interface and SubInterface gives the network information.

查看更多
男人必须洒脱
3楼-- · 2019-01-23 19:20

take a look at phoney tools, they have class PhoneNetworking for this:

http://wildermuth.com/2011/03/05/Phoney_Tools_Updated_(WP7_Open_Source_Library)

its open source you can check the source code

查看更多
在下西门庆
4楼-- · 2019-01-23 19:28

If you can use the Mango (7.1) SDK, and if your scenario involves using sockets, there's a trivial way to get the NetworkInterfaceType/SubType information for the connection you just made:

    NetworkInterfaceInfo netInterfaceInfo = socket.GetCurrentNetworkInterface();
    var type = netInterfaceInfo.InterfaceType;
    var subType = netInterfaceInfo.InterfaceSubtype;

No need to use the NetworkInterface.NetworkInterfaceType property (which notoriously takes up to 30sec to return); no need to trigger a hostname resolution just to determine the network type; no need to listen to network change events.

Of course, this works best in conjunction with DeviceNetworkInformation.IsNetworkAvailable or NetworkInterface.GetIsNetworkAvailable() - those calls return immediately whether you're on a network or not. If you are, you connect the socket first and ask questions when it's connected :-)

A final note: beware of Mango's DeviceNetworkInformation.IsWiFiEnabled - I thought it would return whether I was on a wifi network, but instead it returns whether wifi is turned on or off in the phone settings... not super useful.

查看更多
Luminary・发光体
5楼-- · 2019-01-23 19:28

Unfortunately the api's don't provide very limited information about the kind of network connection you have. You can tell if you are on 3G, Cellular or Ethernet (i.e. USB connection to PC) but that is all the information you get.

Check out this for more info Better way to check for an network connection on WP7

查看更多
一纸荒年 Trace。
6楼-- · 2019-01-23 19:31

As of the Mango release (beta 2 and RC), this information is now available but it requires you to actually make a connection, presumably because it doesn't check until something needs it.

You can either perform a DNS resolution (see below) or use the GetCurrentNetworkInterface WebRequest extension method, which will throw an InvalidOperationException if the request hasn't connected yet.

There are also some events to follow in the Microsoft.Phone.Net.NetworkInformation namespace, but I wouldn't be surprised if those events didn't fire until a connection was made.

Interestingly, it seems you can also prefer or require on a per-connection basis using the SetNetworkPreference and SetNetworkRequirement extension methods, though it doesn't go beyond wifi vs cellular.

DeviceNetworkInformation.ResolveHostNameAsync(
            new DnsEndPoint("microsoft.com", 80), 
            new NameResolutionCallback(nrr =>
                {
                    var info = nrr.NetworkInterface;

                    var type = info.InterfaceType;
                    var subType = info.InterfaceSubtype;
                }), null);

The enumeration values for NetworkInterfaceType (wifi/gsm) and NetworkInterfaceSubType (edge/3g) are available on MSDN.

查看更多
我命由我不由天
7楼-- · 2019-01-23 19:34

Without socket:

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");
查看更多
登录 后发表回答