如何抓取網路連線資訊 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
本主題說明如何使用 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 的方法。如果您只需要傳回與網際網路連線關聯的設定檔,使用 getInternetConnectionProfile 方法。
您必須編寫程式碼,在呼叫大多數非同步網路方法時處理例外狀況。此外,抓取 ConnectionProfile 的 Windows.Networking.Connectivity 命名空間中的方法會擲回例外狀況。您的例外狀況處理常式可以抓取例外狀況發生原因的更詳細資訊,更清楚地了解失敗的情況並作出適當的決定。如需詳細資訊,請參閱如何處理網路應用程式中的例外狀況。
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;
}
摘要
在這個主題中,我們檢閱如何抓取連線設定檔以及每個設定檔包含的連線資訊。使用這項資訊以協助應用程式做出正確的選擇,這對於穩定的連線經驗是很重要的。
如需使用連線資訊來引導網路應用程式行為的其他指導方針與最佳做法,請參閱如何管理網路連線事件與可用性變更。
相關主題
其他
使用 JavaScript 建立您的第一個 Windows 執行階段應用程式
參考
Windows.Networking.Connectivity
範例