読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

ネットワークの接続状態を確認する

UWPでインターネットの接続状態を確認するには、NetworkInformationクラスを使います。

NetworkInformationクラスのGetInternetConnectionProfileでインターネット接続へのConnectionprofileクラスが取得できます。これに対して、GetNetworkConnectivityLevelを呼び出すとネットワークの接続状態が取れます。NetworkInformationクラスの状態が変わったときに発生するイベントのNetworkStatusChangedイベントを組み合わせると、ネットワークの状態をリアルタイムに表示することが出来ます。

画面にTextBlockをTextBlockという名前でおいて以下のコードをコードビハインドに書くとネットワークの状況に応じて接続状況が画面に表示されるようになります。

using System;
using Windows.Networking.Connectivity;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

namespace App44
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            NetworkInformation.NetworkStatusChanged += this.NetworkInformation_NetworkStatusChanged;
            this.NetworkInformation_NetworkStatusChanged(null);
        }

        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            base.OnNavigatedFrom(e);
            NetworkInformation.NetworkStatusChanged -= this.NetworkInformation_NetworkStatusChanged;
        }

        private async void NetworkInformation_NetworkStatusChanged(object sender)
        {
            var ni = NetworkInformation.GetInternetConnectionProfile();
            if (ni != null)
            {
                var text = default(string);
                if (ni.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess)
                {
                    text = "接続中";
                }
                else
                {
                    text = "接続中ではありません。";
                }

                if (this.Dispatcher.HasThreadAccess)
                {
                    this.TextBlock.Text = text;
                }
                else
                {
                    await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                    {
                        this.TextBlock.Text = text;
                    });
                }
            }
        }
    }
}

f:id:okazuki:20160305172103p:plain