语言: HTML | XAML

如何检索网络连接信息 (XAML)

Applies to Windows and Windows Phone

本主题显示了如何使用 Windows.Networking.Connectivity 命名空间中的类检索有关设备上的网络连接的连接性详细信息和使用情况信息。

先决条件

以下示例使用 C# 或 C++,且基于网络信息示例。 有关创建使用 C# 或 Visual Basic 的 Windows 运行时应用的常规帮助,请参阅创建第一个使用 C# 或 Visual Basic 的 Windows 运行时应用。有关创建使用 C++ 的 Windows 运行时应用的常规帮助,请参阅创建第一个使用 C++ 的 Windows 运行时应用

什么是连接配置文件?

一个 ConnectionProfile 即代表设备上已建立的一个网络连接。从 ConnectionProfile 中访问的信息可用于确定当前连接水平、跟踪数据使用情况,或者确定用于维护连接的网络适配器。通过注册,从而通知 ConnectionProfile 的属性更改,你所连接的 Windows 运行时应用可在针对网络环境的变化调整行为时做出正确的选择。有关详细信息,请参阅如何管理网络连接事件和可用性更改

有关更多特定的情况,例如一些经常漫游且使用按流量计费网络的移动设备的联网应用程序,ConnectionProfile 所提供的成本和数据计划信息可用于防止意外被运营商收取服务费用。有关详细信息,请参阅如何管理按流量计费的网络成本约束

每个 ConnectionProfile 都提供了对以下连接信息的访问:

数据来自描述

连接成本

ConnectionCost

成本详细信息,包括数据限制和漫游信息。

成本类型

NetworkCostType

连接目前所用的网络的成本类型。

数据计划状态与使用情况

DataPlanStatusDataPlanUsage

连接所关联的数据计划的具体使用情况信息。

本地使用情况

NetworkUsage

本地连接的使用信息。

网络适配器

NetworkAdapter

可为连接提供连接功能的网络适配器。

WLAN 和 WWAN 连接属性

WlanConnectionProfileDetails

WwanConnectionProfileDetails

提供特定于 WLAN 和 WWAN 连接配置文件的其他详细信息。

 

检索连接配置文件

NetworkInformation 类是一个静态类,它可定义你的应用用来检索 ConnectionProfile 的方法。NetworkInformation 类定义用于检索 ConnectionProfile 的两种方法。如果仅需要返回与 Internet 连接关联的配置文件,请使用 GetInternetConnectionProfile 方法。

当你调用大部分异步网络方法时,必须编写代码以处理异常。同样,Windows.Networking.Connectivity 命名空间中用于检索 ConnectionProfile 的方法也可能导致异常。异常处理程序可以检索关于异常原因的更详细的信息,以更好地了解此次失败,并作出适当的判定。有关详细信息,请参阅如何处理网络应用中的异常



    //Get the Internet connection profile
    string connectionProfileInfo = string.Empty;
    try {
        ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile();

        if (InternetConnectionProfile == null) {
            NotifyUser("Not connected to Internet\n");
        }
        else {
            connectionProfileInfo = GetConnectionProfile(InternetConnectionProfile);
            NotifyUser("Internet connection profile = " +connectionProfileInfo);
        }
    }
    catch (Exception ex) {
        NotifyUser("Unexpected exception occurred: " + ex.ToString());
    }



如果你希望检索所有连接(包括 Internet 连接)的配置文件,请使用 GetConnectionProfiles 方法。



    // Get all connection profiles
    string connectionProfileList = string.Empty;
    try {
        var ConnectionProfiles = NetworkInformation.GetConnectionProfiles();
        foreach (var connectionProfile in ConnectionProfiles) {
            //Display Profile information for each of the connection profiles
            connectionProfileList += GetConnectionProfile(connectionProfile);
            connectionProfileList += "--------------------------------------------------------------------\n";
        }
            NotifyUser("Internet connection profile = " +connectionProfileList);
    }
    catch (Exception ex) {
        NotifyUser("Unexpected exception occurred: " + ex.ToString());
    }


从连接配置文件访问信息

以下示例代码将调用 ConnectionProfile 上的方法,以检索网络连接状态、连接成本以及数据计划状态信息。ConnectionProfile 上的 GetConnectionCost 方法为配置文件检索 ConnectionCost 信息。ConnectionProfile 上的 GetDataPlanStatus 方法为配置文件检索 DataPlanStatus 信息。ConnectionProfile 上的其他方法可检索无线 LAN 信息上的信息(当连接配置文件使用 Wi-Fi 时),或在无线 WAN 信息上检索信息(当连接配置文件使用移动宽带时)。


//Get some ConnectionProfile information
//
string GetConnectionProfile(ConnectionProfile connectionProfile)
{
    string connectionProfileInfo = string.Empty;
    if (connectionProfile != null) {
        connectionProfileInfo = "Profile Name : " + connectionProfile.ProfileName + "\n";

        switch (connectionProfile.GetNetworkConnectivityLevel()) {
            case NetworkConnectivityLevel.None:
                connectionProfileInfo += "Connectivity Level : None\n";
                break;
            case NetworkConnectivityLevel.LocalAccess:
                connectionProfileInfo += "Connectivity Level : Local Access\n";
                break;
            case NetworkConnectivityLevel.ConstrainedInternetAccess:
                connectionProfileInfo += "Connectivity Level : Constrained Internet Access\n";
                break;
            case NetworkConnectivityLevel.InternetAccess:
                connectionProfileInfo += "Connectivity Level : Internet Access\n";
                break;
        }

        switch (connectionProfile.GetDomainConnectivityLevel()) {
            case DomainConnectivityLevel.None:
                connectionProfileInfo += "Domain Connectivity Level : None\n";
                break;
            case DomainConnectivityLevel.Unauthenticated:
                connectionProfileInfo += "Domain Connectivity Level : Unauthenticated\n";
                break;
            case DomainConnectivityLevel.Authenticated:
                connectionProfileInfo += "Domain Connectivity Level : Authenticated\n";
                break;
        }

        //Get Connection Cost information
        ConnectionCost connectionCost = connectionProfile.GetConnectionCost();
        connectionProfileInfo += GetConnectionCostInfo(connectionCost);

        //Get Dataplan Status information
        DataPlanStatus dataPlanStatus = connectionProfile.GetDataPlanStatus();
        connectionProfileInfo += GetDataPlanStatusInfo(dataPlanStatus);
                
    }
    return connectionProfileInfo;
}

// Get ConnectionCost information for a profile
string GetConnectionCostInfo(ConnectionCost connectionCost)
{
    string cost = string.Empty;
    cost += "Connection Cost Information: \n";
    cost += "====================\n";

    if (connectionCost == null) {
        cost += "Connection Cost not available\n";
        return cost;
    }

    switch (connectionCost.NetworkCostType) {
         case NetworkCostType.Unrestricted:
             cost += "Cost: Unrestricted";
             break;
         case NetworkCostType.Fixed:
             cost += "Cost: Fixed";
             break;
         case NetworkCostType.Variable:
             cost += "Cost: Variable";
             break;
         case NetworkCostType.Unknown:
             cost += "Cost: Unknown";
             break;
         default:
             cost += "Cost: Error";
             break;
     }
     cost += "\n";
     cost += "Roaming: " + connectionCost.Roaming + "\n";
     cost += "Over Data Limit: " + connectionCost.OverDataLimit + "\n";
     cost += "Approaching Data Limit : " + connectionCost.ApproachingDataLimit + "\n";

     return cost;
}

// Get DataPlanStatus information for a profile
string GetDataPlanStatusInfo(DataPlanStatus dataPlan)
{
    string dataplanStatusInfo = string.Empty;
    dataplanStatusInfo = "Dataplan Status Information:\n";
    dataplanStatusInfo += "====================\n";

    if (dataPlan == null) {
        dataplanStatusInfo += "Dataplan Status not available\n";
        return dataplanStatusInfo;
    }
            
    if (dataPlan.DataPlanUsage != null) {
        dataplanStatusInfo += "Usage In Megabytes : " + dataPlan.DataPlanUsage.MegabytesUsed + "\n";
        dataplanStatusInfo += "Last Sync Time : " + dataPlan.DataPlanUsage.LastSyncTime + "\n";
    }
    else {
        dataplanStatusInfo += "Usage In Megabytes : Not Defined\n";
    }

    ulong? inboundBandwidth = dataPlan.InboundBitsPerSecond;
    if (inboundBandwidth.HasValue) {
        dataplanStatusInfo += "InboundBitsPerSecond : " + inboundBandwidth + "\n";
    }
    else {
        dataplanStatusInfo += "InboundBitsPerSecond : Not Defined\n";
    }

    ulong? outboundBandwidth = dataPlan.OutboundBitsPerSecond;
    if (outboundBandwidth.HasValue) {
        dataplanStatusInfo += "OutboundBitsPerSecond : " + outboundBandwidth + "\n";
    }
    else {
        dataplanStatusInfo += "OutboundBitsPerSecond : Not Defined\n";
    }

    uint? dataLimit = dataPlan.DataLimitInMegabytes;
    if (dataLimit.HasValue) {
        dataplanStatusInfo += "DataLimitInMegabytes : " + dataLimit + "\n";
    }
    else {
        dataplanStatusInfo += "DataLimitInMegabytes : Not Defined\n";
    }

    System.DateTimeOffset? nextBillingCycle = dataPlan.NextBillingCycle;
    if (nextBillingCycle.HasValue) {
        dataplanStatusInfo += "NextBillingCycle : " + nextBillingCycle + "\n";
    }
    else {
        dataplanStatusInfo += "NextBillingCycle : Not Defined\n";
    }

    uint? maxTransferSize = dataPlan.MaxTransferSizeInMegabytes;
    if (maxTransferSize.HasValue) {
        dataplanStatusInfo += "MaxTransferSizeInMegabytes : " + maxTransferSize + "\n";
    }
    else {
        dataplanStatusInfo += "MaxTransferSizeInMegabytes : Not Defined\n";
    }
    return dataplanStatusInfo;
}

摘要

在本主题中,我们回顾了如何检索连接配置文件及各个配置文件所包含的连接信息。若要确保可靠的连接体验,必须使用该信息来帮助你的应用作出正确的选择。

有关使用连接信息来指导联网应用的行为的其他指南和最佳做法,请参阅如何管理网络连接事件和可用性更改

相关主题

其他
创建你的第一个使用 C# 或 Visual Basic 的 Windows 运行时应用
创建你的第一个使用 C++ 的 Windows 运行时应用
如何处理网络应用中的异常
如何管理按流量计费的网络成本约束
如何管理网络连接事件和可用性更改
如何检索网络适配器和区域信息
如何检索网络连接使用情况数据
参考
ConnectionCost
ConnectionProfile
DataPlanStatus
NetworkInformation
Windows.Networking.Connectivity
示例
网络信息示例
网络状态背景示例

 

 

显示:
© 2015 Microsoft