如何检索网络连接信息 (HTML)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
本主题显示了如何使用 Windows.Networking.Connectivity 命名空间中的类检索有关设备上的网络连接的连接性详细信息和使用信息。
先决条件
以下示例使用 JavaScript,且基于网络信息示例。 有关创建使用 JavaScript 的 Windows 运行时应用的常规帮助,请参阅创建第一个使用 JavaScript 的 Windows 运行时应用。
什么是连接配置文件?
一个 ConnectionProfile 即代表设备上已建立的一个网络连接。从 ConnectionProfile 中访问的信息可用于确定当前连接水平、跟踪数据使用情况,或者确定用于维护连接的网络适配器。通过注册,从而通知 ConnectionProfile 的属性更改,你所连接的 Windows 运行时应用可在针对网络环境的变化调整行为时做出正确的选择。有关为这些通知进行注册的详细信息,请参阅如何管理网络连接事件和可用性更改。
有关更多特定的情况,例如一些经常漫游且使用按流量计费网络的移动设备的联网应用程序,ConnectionProfile 所提供的成本和数据计划信息可用于防止意外被运营商收取服务费用。有关详细信息,请参阅如何管理按流量计费的网络成本约束。
每个 ConnectionProfile 都提供了对以下连接信息的访问:
数据 | 来自 | 描述 |
---|---|---|
连接成本 |
ConnectionCost | 成本详细信息,包括数据限制和漫游信息。 |
成本类型 |
NetworkCostType | 连接目前所用的网络的成本类型。 |
数据计划状态与使用情况 |
DataPlanStatus、DataPlanUsage | 连接所关联的数据计划的具体使用情况信息。 |
本地使用情况 |
NetworkUsage | 本地连接的使用信息。 |
网络适配器 |
NetworkAdapter | 可为连接提供连接功能的网络适配器。 |
WLAN 和 WWAN 连接属性 |
提供特定于 WLAN 和 WWAN 连接配置文件的其他详细信息。 |
检索连接配置文件
首先,我们定义 NetworkInformation 类的一个实例,它可定义你的应用用来检索 ConnectionProfile 的方法。还要定义 NetworkCostType 类的一个实例,它可定义与 ConnectionProfile 相关联的可能的网络成本类型。
var networkInfo = Windows.Networking.Connectivity.NetworkInformation;
var networkCostInfo = Windows.Networking.Connectivity.NetworkCostType;
NetworkInformation 类定义用于检索 ConnectionProfile 的两种方法。如果仅需要返回与 Internet 连接关联的配置文件,请使用 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");
}
}
如果你希望检索所有连接(包括 Internet 连接)的配置文件,请使用 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;
}
摘要
在本主题中,我们回顾了如何检索连接配置文件及各个配置文件所包含的连接信息。若要确保可靠的连接体验,必须使用该信息来帮助你的应用作出正确的选择。
有关使用连接信息来指导联网应用的行为的其他指南和最佳做法,请参阅如何管理网络连接事件和可用性更改。
相关主题
其他
创建第一个采用 JavaScript 的 Windows 运行时应用
参考
Windows.Networking.Connectivity
示例