Как обнаружить сотовую связь в C # - PullRequest
1 голос
/ 13 марта 2019

Я работаю над "обычным" C # WPF-приложением (без приложения UWP), и мне нужно знать, подключен ли я к сотовой сети.Сотовая связь - как при использовании сим-карты внутри устройства, так и при использовании точки доступа с мобильного телефона.

Как мне этого добиться?

Справочная информация. Поскольку приложение может загружать много данных, я хочу, чтобы у пользователей был выбор, хотят ли они избегать загрузки по сотовым соединениям или нет)

Другие вопросы SO: я видел этот вопрос и этот вопрос , они сосредоточены на функциональности UWP.Также этот , который просто фокусируется на самом соединении, а не на том, является ли это сотовым соединением или нет.

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Я экспериментировал с библиотеками UWP и смог решить ее, используя ссылки UWP.

Я добавил эту ссылку:

C:\Program Files (x86)\Windows Kits\10\References\10.0.17763.0\Windows.Foundation.UniversalApiContract\7.0.0.0\Windows.Foundation.UniversalApiContract.winmd

И использовал этот код для проверки дозированных соединений:

private void CheckIsMetered()
{
    var profile = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile();
    IsInternetAvailable = profile != null && profile.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess;
    if (IsInternetAvailable)
        IsMetered = profile.GetConnectionCost().NetworkCostType != Windows.Networking.Connectivity.NetworkCostType.Unrestricted;
}

Я использую событие NetworkStatusChanged для повторной проверки IsMetered.

CheckIsMetered();
NetworkInformation.NetworkStatusChanged += (s) => CheckIsMetered(); 

Это работает в моем приложении WPF.

1 голос
/ 13 марта 2019

Вы можете идентифицировать сетевые адаптеры вашей машины с помощью System.Net.NetworkInformation .

Кроме того, вы можете воспользоваться свойством NetworkInterface.OperationalStatus для фильтрацииадаптеры, которые в данный момент подключены, и NetworkInterfaceType для определения типа подключения.Проверьте приведенный ниже пример.

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

 NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
 foreach (NetworkInterface adapter in interfaces)
    {
        //Check if it's connected
        if (adapter.OperationalStatus == OperationalStatus.Up
            //The network interface uses a mobile broadband interface for WiMax devices.
            && (adapter.NetworkInterfaceType == NetworkInterfaceType.Wman
                //The network interface uses a mobile broadband interface for GSM-based devices.
                || adapter.NetworkInterfaceType == NetworkInterfaceType.Wwanpp
                //The network interface uses a mobile broadband interface for CDMA-based devices.
                || adapter.NetworkInterfaceType == NetworkInterfaceType.Wwanpp2))
        {
            //adapter probably is cellular
        }                
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...