みかづきメモ

学習したことのメモとか、日記とか、備忘録。

WPF で従量制課金接続を検出する

なんとなく Outlook 2016 を使っていたら、

f:id:MikazukiFuyuno:20160511131457p:plain:w400

画像のように、従量制課金接続であることを検出して、自動でオフラインとなっていました。
他のアプリでも使えると、何かと便利そうなので、実装してみます。


従量制課金接続などといったネットワークの状態を知るには、 NetworkInformation クラスを
使用します。
しかしながら、 NetworkInformation クラスは Windows.Networking.Connectivity にあり、
この名前空間は UWP の API となっているため、 WPF 標準では使用することができません。

ということで、 Desktop アプリから UWP の API を呼べるようにします。
幾つか方法があるようですが、 NuGet Gallery | UWP for Desktop 10.0.10240.1 を追加することで
使えるようになるようです。
(Build 10240 のままだけど、大丈夫なのだろうか)

他の方法としては、一旦プロジェクトをアンロードし、 *.csproj

<TargetPlatformVersion>10.0</TargetPlatformVersion>

を追加し、再読み込みして必要なアセンブリを追加していくという方法もあります。

UWP の API を呼べるようにしたら、 NetworkInformation が使えるようになるので、
コードを書いていきます。

こんな感じ。

var networkInformation = NetworkInformation.GetInternetConnectionProfile();
var connectionCost = networkInformation.GetConnectionCost();
if (connectionCost != NetworkCostType.Unknown && connectionCost != NetworkCostType.Unrestricted) {
    // 従量制課金接続
}

なお、ネットワークが切り替わったら呼び出されるイベントも同様に存在しているので、
それを使えば、 Outlook のように、従量制課金接続になったらオフライン...といったことも可能になります。