kazuakix の日記

Windows Phone とか好きです

Windows Phone 8.1 で IP アドレスを確認する(続き)

昨日の続きです。

NetworkInformation.GetHostNames を使って HostName クラスを取得することで IP アドレスはわかりました。ただ、接続名等の情報や その接続でインターネットに接続できているのか等については別に調べる必要があります。
 
NetworkInformation クラスには接続の情報を調べるために 3 つのメソッドがあります。

GetInternetConnectionProfile はお手軽でいいのですが、取得できるのがインターネットに接続できているメインの接続 1 つだけなので役には立ちません。(単純にインターネットに接続できているかどうかを調べるだけであれば有用ですが...)

次の GetConnectionProfiles はすべての接続を取得することができるのですが、逆に 1 度でも接続した事のある無線 LAN のプロファイルなんかも表示されたりします。別々の無線 LAN のプロファイルでもアダプタ ID は同じなので、今どのプロファイルを使ってい接続しているかを知ることができません。
 
という事で最後の手段として FindConnectionProfilesAsync を使います。これに現在接続されているというフィルタ条件を指定して呼び出すことで実際に使用されているすべての接続の情報を取得することができます。これと NetworkInformation.GetHostNames の結果を組み合わせるとこんな感じでしょうか。

FindConnectionProfilesAsync は最後に Async と付いているくらいなのでみんな大好き非同期です。でも await/async のおかげで難しい事を考えなくても扱えますね。
 

ただ、ひとつ問題なのは MSDN の日本語ドキュメントです。
例えば FindConnectionProfilesAsync のドキュメントでは要件欄に Windows Phone 8 の名前がないですし、GetConnectionProfiles に至っては「この API は実装されていません」とまで書かれていました。最初は使えないんだと思っていたのですが、英語ページに行ってはじめて使えることがわかる状態です。

f:id:kazuakix:20140721010951j:plain

怪しい日本語は注意して読めばいいのですが、違うことを書かれるのは困りますね。とりあえずフィードバックを送っておきました。