Получение данных о сетевом подключении (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

В этой статье описано, как получать данные о возможности подключения и использовании сетевых подключений на устройствах, использующих классы из пространства имен Windows.Networking.Connectivity.

Необходимые условия

В следующих примерах, основанных на образце с информацией о сети, используется JavaScript. Общую справку по созданию приложения среды выполнения Windows на JavaScript см. в разделе Создание первого приложения среды выполнения Windows на JavaScript.

Что такое профиль подключений?

ConnectionProfile представляет собой установленное на устройстве единое сетевое подключение. С помощью данных, доступ к которым получен из ConnectionProfile, можно определить уровень текущего подключения, объем переданных данных или тип сетевого адаптера, используемого для поддержки подключения. Зарегистрировавшись для получения уведомлений об изменениях свойств объекта ConnectionProfile в подключенном приложении среды выполнения Windows, можно будет выбирать правильные способы адаптации логики поведения объекта к изменениям в сетевом окружении. Подробнее о регистрации для этих уведомлений: Как управлять событиями и изменениями доступности подключения.

Для более специализированных сценариев, таких как подключенные приложения для мобильных устройств, которые часто перемещаются и работают в сетях с лимитным тарифным планом, ConnectionProfile предоставляет данные о стоимости и тарифном плане, благодаря которым можно избежать непредвиденных затрат на услуги связи. Подробнее: Как управлять тарифными ограничениями в сети с лимитным тарифным планом.

Каждый ConnectionProfile предоставляет доступ к следующим данным о подключении:

Вид данных Способ получения Описание

Стоимость подключения

ConnectionCost

Подробная информация о стоимости подключения, в том числе данные об ограничении объема передачи данных и о роуминге.

Тип затрат

NetworkCostType

Тип затрат, используемый в данный момент, на сетевое подключение.

Состояние и использование тарифного плана

DataPlanStatus, DataPlanUsage

Информация об использовании тарифного плана, связанного с данным подключением.

Локальное использование

NetworkUsage

Информация об использовании локального подключения.

Сетевой адаптер

NetworkAdapter

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

Свойства подключений беспроводных сетей и беспроводных глобальных сетей

WlanConnectionProfileDetails

WwanConnectionProfileDetails

Предоставляются дополнительные сведения о профилях подключений беспроводных сетей и беспроводных глобальных сетей.

 

Получение профилей подключения

Определим экземпляр класса NetworkInformation, определяющий методы, используемые вашим приложением для получения ConnectionProfile. Затем определим экземпляр NetworkCostType, определяющий возможные типы стоимости сети, связанные с ConnectionProfile.

var networkInfo = Windows.Networking.Connectivity.NetworkInformation;
var networkCostInfo = Windows.Networking.Connectivity.NetworkCostType;

Класс NetworkInformation определяет два метода для получения ConnectionProfile. Чтобы получить только профиль, связанный с подключением к Интернету, используйте метод getInternetConnectionProfile.

При вызове большинства асинхронных сетевых методов вы должны указать код для обработки исключений. Кроме того, у методов в пространстве имен Windows.Networking.Connectivity, получающих ConnectionProfile, могут быть исключения. Обработчик исключений может получить подробную информацию о причине исключения, чтобы разобраться в проблеме и принять необходимые меры. Дополнительную информацию см. в разделе об обработке исключений в сетевых приложениях.

function displayInternetConnectionProfileInfo() {
    try {
        // get the ConnectionProfile that is currently used to connect to the Internet
        var internetProfile = networkInfo.getInternetConnectionProfile();
        mySample.displayStatus(GetConnectionProfileInfo(internetProfile));
    }
    catch (e) {
        mySample.displayError("Exception Caught: " + e + "\n\r");
    }
}

Если необходимо получить профили для всех соединений (включая подключение к Интернету), используйте метод getConnectionProfiles.

function displayConnectionProfileList() {
  var profileList = "";
  try {
      var ConnectionProfiles = networkInfo.getConnectionProfiles();
      if (ConnectionProfiles.length != 0) {
          for (var i = 0; i < ConnectionProfiles.length; i++) {

              //Display Connection profile info for each profile
              profileList += GetConnectionProfileInfo(ConnectionProfiles[i]);
              profileList += "-----------------------------------------\n\r";
          }
          mySample.displayStatus(profileList);
          }
          else {
              mySample.displayStatus("No profiles found");
          }
      }

      catch (e) {
         mySample.displayError("Exception Caught: " + e + "\n\r");
      }
}

Доступ к данным из профиля подключения

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

function getConnectionProfileInfo(connectionProfile) {

    if (connectionProfile == null) {
        return "";
    }

    try {
        var returnString = "ProfileName: " + connectionProfile.profileName + "\n\r";

        switch (connectionProfile.getNetworkConnectivityLevel()) {
            case networkConnectivityInfo.none:
                returnString += "Connectivity Level: None\n\r";
                break;
            case networkConnectivityInfo.localAccess:
                returnString += "Connectivity Level: Local Access\n\r";
                break;
            case networkConnectivityInfo.constrainedInternetAccess:
                returnString += "Connectivity Level: Constrained Internet Access\n\r";
                break;
            case networkConnectivityInfo.internetAccess:
                returnString += "Connectivity Level: Internet Access\n\r";
                break;
        }

        //Display Connection cost info
        returnString += "Connection Cost Information:\n\r";
        returnString += "===============\n\r";
        var connectionCost = connectionProfile.getConnectionCost();
        returnString += "Cost Type: " + GetCostType(connectionCost.networkCostType) + "\n\r";
        returnString += "Roaming: " + connectionCost.roaming + "\n\r";
        returnString += "Over Datalimit: " + connectionCost.overDataLimit + "\n\r";
        returnString += "Approaching Datalimit: " + connectionCost.approachingDataLimit + "\n\r";

        //Display Dataplan status info
        returnString += "Dataplan Status Information:\n\r";
        returnString += "===============\n\r";
        var dataPlanStatus = connectionProfile.getDataPlanStatus();
        if (dataPlanStatus.dataPlanUsage != null) {
            returnString += "Usage In Megabytes: " + dataPlanStatus.dataPlanUsage.megabytesUsed + "\n\r";
            returnString += "Last Sync Time: " + dataPlanStatus.dataPlanUsage.lastSyncTime + "\n\r";
        }
        else {
            returnString += "Dataplan Usage: " + "Not Defined" + "\n\r";
        }

        if (dataPlanStatus.InboundBitsPerSecond != null) {
            returnString += "Inbound Bits Per Second: " + dataPlanStatus.InboundBitsPerSecond + "\n\r";
        }
        else {
            returnString += "Inbound Bits Per Second: " + "Not Defined" + "\n\r";
        }

        if (dataPlanStatus.OutboundBitsPerSecond != null) {
            returnString += "Outbound Bits Per Second: " + dataPlanStatus.OutboundBitsPerSecond + "\n\r";
        }
        else {
            returnString += "Outbound Bits Per Second: " + "Not Defined" + "\n\r";
        }

        if (dataPlanStatus.dataLimitInMegabytes != null) {
            returnString += "Data Limit In Megabytes: " + dataPlanStatus.dataLimitInMegabytes + "\n\r";
        }
        else {
            returnString += "Data Limit In Megabytes: " + "Not Defined" + "\n\r";
        }

        if (dataPlanStatus.nextBillingCycle != null) {
            returnString += "Next Billing Cycle: " + dataPlanStatus.nextBillingCycle + "\n\r";
        }
        else {
            returnString += "Next Billing Cycle: " + "Not Defined" + "\n\r";
        }

        if (dataPlanStatus.maxDownloadFileSizeInMegabytes != null) {
            returnString += "Maximum Download File Size in Megabytes: " + dataPlanStatus.maxDownloadFileSizeInMegabytes + "\n\r";
        }
        else {
            returnString += "Maximum Download File Size in Megabytes: " + "Not Defined" + "\n\r";
        }
            returnString += "Cost Based Suggestions: " + CostBasedSuggestions(connectionCost) + "\n\r";
        }

    catch (e) {
        mySample.displayError("Exception Caught: " + e + "\n\r");
    }

    return returnString;
}

Сводка

В этой статье мы рассмотрели получение профилей подключения и сведений о подключении, содержащихся в каждом профиле. Эти сведения необходимы для того, чтобы ваше приложение могло выбрать подходящие параметры и обеспечить надежное подключение.

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

Связанные разделы

Прочие ссылки

Создание первого приложения среды выполнения Windows на JavaScript

Обработка исключений в сетевых приложениях

Как управлять событиями и изменениями доступности подключения

Как управлять тарифными ограничениями в сети с лимитным тарифным планом

Получение сведений о сетевом адаптере и расположении

Получение данных об использовании подключения за определенный период

Ссылки

ConnectionProfile

DataPlanStatus

NetworkInformation

Windows.Networking.Connectivity

Примеры

Пример Network information

Пример Network status background