Как я могу проверить 3G, Wi-Fi, EDGE, сотовые сети в Windows Phone 7? - PullRequest
7 голосов
/ 16 марта 2011

Как я могу проверить 3G, Wi-Fi, EDGE, сотовые сети в Windows Phone 7, используя C #?

Ответы [ 6 ]

6 голосов
/ 03 декабря 2011

Если вы можете использовать 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 () - эти вызовы немедленно возвращаются независимо от того, находитесь вы в сети или нет.Если да, вы сначала подключаете сокет и задаете вопросы, когда он подключен: -)

Последнее замечание: остерегайтесь информации DeviceNetworkInformation.IsWiFiEnabled от Mango.он возвращает независимо от того, включен или выключен Wi-Fi в настройках телефона ... не очень полезно.

2 голосов
/ 05 сентября 2014

без розетки:

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");
2 голосов
/ 24 августа 2011

Начиная с версии Mango (бета-версия 2 и RC) эта информация теперь доступна, но для этого требуется, чтобы вы действительно установили соединение, предположительно, потому что оно не проверяет, пока что-то не понадобится.

Вы можете выполнить разрешение DNS (см. Ниже) или использовать метод расширения WebRequest GetCurrentNetworkInterface, который вызовет исключение InvalidOperationException, если запрос еще не подключен.

В пространстве имен Microsoft.Phone.Net.NetworkInformation также должны следовать некоторые события, но я не удивлюсь, если эти события не сработают, пока не будет установлено соединение.

Интересно, что вы также можете отдавать предпочтение или требовать для каждого соединения, используя SetNetworkPreference и SetNetworkRequirement , хотя это не выходит за рамки Wi-Fi или сотовой связи.

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

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

Значения перечисления для NetworkInterfaceType (wifi / gsm) и NetworkInterfaceSubType (edge ​​/ 3g) доступны в MSDN.

2 голосов
/ 16 марта 2011

взгляните на телефонные инструменты, для этого у них есть класс PhoneNetworking:

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

с открытым исходным кодом вы можете проверить исходный код

1 голос
/ 16 марта 2011

К сожалению, API не предоставляют очень ограниченной информации о типе сетевого подключения, которое у вас есть. Вы можете определить, используете ли вы 3G, сотовую связь или Ethernet (то есть USB-соединение с ПК), но это все, что вы получаете.

Проверьте это для получения дополнительной информации Лучший способ проверить сетевое соединение на WP7

0 голосов
/ 26 октября 2015

Для получения сетевых данных для приложения Windows Phone, т. Е. Оно подключено к сети Ethernet, Wi-Fi или сотовой сети, а также получает сеть подтипа i.e 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 выдают информацию о сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...