酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windowsストアアプリでネットワーク接続状態が変わったイベントを取得する(接続状態の変化を検出する)

NetworkInterfaceクラスをつかうことで、デバイスがどんなネットワークインターフェースに接続されているのかを取得したり、接続されている回線の速度を取得したりすることができます。

Windows Phone 7でも、同名のクラスが存在していますが、WindowsストアアプリのNetworkInterfaceクラスの方が機能的に勝っています。

名前空間:System.Net.NetworkInformation

System.Object
 +--System.Net.NetworkInformation.NetworkInterface

IPアドレスの変化を受け取る

System.Net.NetworkInformation名前空間のNetworkChangeクラスを使用することで、Windowsストアアプリ内でネットワークアドレス(IPアドレス)が変わったのを取得する事ができます。

NetworkChange.NetworkAddressChangedイベントにイベントハンドラを設定することで、ネットワークへの接続状況が変化するとイベントが発生します。

// using System.Net.NetworkInformation;

protected virtual void LoadState(Object navigationParameter, 
    Dictionary<String, Object> pageState)
{
    NetworkChange.NetworkAddressChanged 
        += NetworkChange_NetworkAddressChanged;
}

void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
{
    // IPアドレスが変わったのを検知する
}

ネットワークの接続状態の変化を受け取る

先ほどのはIPアドレスの変化を通知するイベントですが、こちらの方はネットワークの接続状態の変化を通知するイベントです。

protected virtual void LoadState(Object navigationParameter, 
    Dictionary<String, Object> pageState)
{
    NetworkInformation.NetworkStatusChanged 
        += NetworkInformation_NetworkStatusChanged;
}

void NetworkInformation_NetworkStatusChanged(object sender)
{
    // ネットワークの接続状態を調べる
}

画面遷移するときにはイベントを通知させないように、イベントハンドラを削除しておきます。

protected virtual void SaveState(Dictionary<String, Object> pageState)
{
    NetworkInformation.NetworkStatusChanged 
        -= NetworkInformation_NetworkStatusChanged;
}

参考資料

関連記事