Xamarin.Essentials:接続
Connectivity クラスを使用すると、デバイスのネットワーク状態の変更を監視したり、現在のネットワーク アクセスとその現在の接続方法を確認したりできます。
作業開始
この API の使用を始めるには、Xamarin.Essentials の概要ガイドを読み、ライブラリが正しくインストールされてプロジェクトに設定されていることを確認してください。
接続の機能にアクセスするには、次のプラットフォーム固有の設定が必要です。
AccessNetworkState
アクセス許可が必要です。Android プロジェクト内で構成する必要があります。 これは次の方法で追加できます。
[プロパティ] フォルダーにある AssemblyInfo.cs ファイルを開き、以下を追加します。
[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]
または、Android マニフェストを追加します。
[プロパティ] フォルダーにある AndroidManifest.xml ファイルを開き、manifest ノードの内部に以下を追加します。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
または、Android プロジェクトを右クリックし、プロジェクトのプロパティを開きます。 [Android マニフェスト] の下で [必要なアクセス許可:] 領域を探し、 [Access Network State](ネットワーク アクセスの状態) アクセス許可を確認します。 これにより、AndroidManifest.xml ファイルが自動的に更新されます。
接続の使用
クラスの Xamarin.Essentials への参照を追加します。
using Xamarin.Essentials;
現在のネットワーク アクセスを確認します。
var current = Connectivity.NetworkAccess;
if (current == NetworkAccess.Internet)
{
// Connection to internet is available
}
ネットワーク アクセスは次のカテゴリに分けられます。
- Internet – ローカルとインターネットのアクセス。
- ConstrainedInternet – 制限付きインターネット アクセスです。 Web ポータルへのローカル接続が提供されている、キャプティブ ポータルの接続を示しています。ただし、インターネットにアクセスするにはポータル経由で特定の資格情報を提供する必要があります。
- local – ローカル ネットワークのみにアクセスします。
- None – 使用できる接続がありません。
- Unknown – インターネット接続を確認できません。
デバイスが実際に使用している接続プロファイルの種類を確認できます。
var profiles = Connectivity.ConnectionProfiles;
if (profiles.Contains(ConnectionProfile.WiFi))
{
// Active Wi-Fi connection.
}
接続プロファイルまたはネットワーク アクセスが変更されるたびに、トリガーされたイベントを受信できます。
public class ConnectivityTest
{
public ConnectivityTest()
{
// Register for connectivity changes, be sure to unsubscribe when finished
Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
}
void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
{
var access = e.NetworkAccess;
var profiles = e.ConnectionProfiles;
}
}
制限事項
NetworkAccess
によって Internet
が報告されるが、Web へのフル アクセスは利用できないという場合があることに注意する必要があります。 各プラットフォーム上での接続の動作方法によってのみ、接続が使用可能であることを保証できます。 たとえば、デバイスは Wi-Fi ネットワークに接続されているが、ルーターがインターネットから切断されている可能性があります。 この例ではインターネットが報告される場合がありますが、実際には接続を使用できません。