ネットワーク接続を検出する

完了

モバイル デバイスのインターネットへの接続は、Wi-Fi および携帯電話テクノロジを使用して行われます。 この依存関係が意味することは、ユーザーがアプリケーションを使用している最中にインターネット接続が失われる可能性があるということです。 それを阻止するためのコードを追加しない場合、アプリは応答を停止し、ユーザー エクスペリエンスを悪くすることがあります。

このユニットでは、ユーザーがインターネット接続を失ったことを検出して、アプリケーションを保護します。 この情報は、REST Web サービスの使用を始めるときに重要になります。

モバイル アプリケーションでのネットワーク接続を検出する理由

モバイル デバイスで接続が失われることはよくあるため、モバイル アプリケーションにインターネット接続があるかどうかを検出することは重要です。 これは、ネットワーク サービス プロバイダーのカバレッジが悪い場合や、トンネル、深い谷、高い山など、電波が制限されているか届かない環境にいることが原因である可能性があります。 また、ネットワーク接続の種類もさまざまです。 WiFi 接続が可能な環境にいる場合、携帯電話へのアクセスに依存する場合よりも、一般に広い帯域幅を利用できます。 インターネットには接続できるかもしれませんが、ビデオ コンテンツのストリーミングなどの携帯電話回線経由の一部の操作は、WiFi 接続に比べて遅く (そして高価に) なる可能性があります。

モバイル デバイスにはこのような課題があるため、それらから保護するためのコードを記述する必要があります。 そうしないと、インターネットを使用する操作がアプリケーションで実行されようとした場合、アプリケーションが応答を停止する可能性があります。

また、アプリケーションでインターネットに接続できないときに、優れたユーザー エクスペリエンスを提供する必要もあります。 インターネット サービスがないためにアプリケーションが動作停止となった場合、ユーザーが混乱したままになってしまう可能性があります。 最適な措置は、ユーザーに情報を提供することです。 インターネット接続がないことと、インターネット接続がなければアプリケーションは完全に動作しない可能性があることを伝えてください。 次に例を示します。

制限付きネットワーク接続に関する警告を示すアプリのスクリーンショット。

この例では、アプリケーション開発者は、インターネットに接続されていないこと、そして Wi-Fi に接続を試みる必要があることをユーザーに知らせています。

ネットワーク接続を検出する

.NET MAUI アプリでネットワーク接続を確認するには、Connectivity クラスを使います。 このクラスは、NetworkAccess というプロパティと ConnectivityChanged というイベントを公開します。 これらのメンバーを使って、ネットワークの変化を検出することができます。

NetworkAccess のプロパティには、Current という別のプロパティを通してアクセスします。 これは、Connectivity がプラットフォーム固有の実装にアクセスするために必要なメカニズムです。

NetworkAccess プロパティは NetworkAccess 列挙型の値を返します。 この列挙型には、ConstrainedInternetInternetLocalNoneUnknown の 5 つの値があります。 NetworkAccess プロパティから値 NetworkAccess.None が返された場合、インターネット接続がなく、ネットワーク用コードを実行してはいけないことがわかります。 このメカニズムは、プラットフォーム間で移植可能です。 次に例を示します。

if (Connectivity.Current.NetworkAccess == NetworkAccess.None)
{
    ...
}

ConnectivityChanged イベントを使用すると、デバイスがインターネットに接続されているかどうかを判断することもできます。 ConnectivityChanged イベントは、ネットワークの状態が変化したときに自動的にトリガーされます。 たとえば、ネットワーク接続が有効な状態で開始し、その後接続が失われた場合、ConnectivityChanged イベントが発生して、その変更について通知されます。 ConnectivityChanged イベント ハンドラーに渡されるパラメーターの 1 つは、ConnectivityChangedEventArgs オブジェクトです。 このオブジェクトには、IsConnected というプロパティが含まれています。 IsConnected プロパティを使用して、インターネットに接続されているかどうかを判断できます。 次に例を示します。

Connectivity.Current.ConnectivityChanged += Connectivity_ConnectivityChanged;
...
void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs  e)
{
    bool stillConnected = e.IsConnected;
}

ConnectivityChanged イベントを使用すると、ネットワーク状態の変化を検出し、さまざまな環境に応じて利用可能な機能をシームレスに調整できるアプリを記述できます。

知識チェック

1.

ネットワーク コードを実行する前にインターネットに接続しているかどうかを確認する最大の理由は、次のうちどれですか。

2.

ユーザーが乗り物で移動中に実行するアプリケーションを書いているとします。 乗り物がトンネルに入ると、デバイスのインターネット接続が失われる可能性があります。 ネットワーク接続の変更を検出するために使用するのは、Connectivity クラスのどのメンバーですか。