ネットワーク接続情報を取得する方法 (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 を取得するためのメソッドが 2 つ定義されています。インターネット接続に関連付けられているプロファイルだけを取得する必要がある場合は、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
サンプル