Udostępnij za pośrednictwem


Connectivity

Przeglądaj przykład. Przeglądanie przykładu

W tym artykule opisano sposób używania interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) IConnectivity w celu sprawdzenia dostępności sieci urządzenia. Połączenie sieciowe może mieć dostęp do Internetu. Urządzenia zawierają również różne rodzaje połączeń sieciowych, takich jak Bluetooth, komórkowy lub WiFi. Interfejs IConnectivity zawiera zdarzenie do monitorowania zmian w stanie połączenia urządzeń.

Domyślna implementacja interfejsu IConnectivity jest dostępna za pośrednictwem Connectivity.Current właściwości . Zarówno interfejs, jak IConnectivity i Connectivity klasa są zawarte w Microsoft.Maui.Networking przestrzeni nazw.

Rozpocznij

Aby uzyskać dostęp do Connectivity funkcji, wymagana jest następująca konfiguracja specyficzna dla platformy.

Uprawnienie AccessNetworkState jest wymagane i musi być skonfigurowane w projekcie systemu Android. Można to dodać w następujący sposób:

  • Dodaj uprawnienie oparte na zestawie:

    Otwórz plik Platformy/Android/MainApplication.cs i dodaj następujące atrybuty zestawu po using dyrektywach:

    [assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]
    

    - lub -

  • Zaktualizuj manifest systemu Android:

    Otwórz plik Platformy/Android/AndroidManifest.xml i dodaj następujący kod w węźlemanifest:

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

    - lub -

  • Zaktualizuj manifest systemu Android w edytorze manifestu:

    W programie Visual Studio kliknij dwukrotnie plik Platformy/Android/AndroidManifest.xml , aby otworzyć edytor manifestu systemu Android. Następnie w obszarze Wymagane uprawnienia sprawdź uprawnienia ACCESS_NETWORK_STATE . Spowoduje to automatyczne zaktualizowanie pliku AndroidManifest.xml .

Korzystanie z akcji Connectivity

Zakres bieżącej sieci można określić, sprawdzając NetworkAccess właściwość .

NetworkAccess accessType = Connectivity.Current.NetworkAccess;

if (accessType == NetworkAccess.Internet)
{
    // Connection to internet is available
}

Dostęp sieciowy należy do następujących kategorii:

  • Internet — dostęp lokalny i internetowy.
  • ConstrainedInternet — ograniczony dostęp do Internetu. Ta wartość oznacza, że istnieje portal z niewoli, w którym jest udostępniany dostęp lokalny do portalu internetowego. Gdy portal będzie używany do podawania poświadczeń uwierzytelniania, dostęp do Internetu jest udzielany.
  • Local — tylko dostęp do sieci lokalnej.
  • None — łączność nie jest dostępna.
  • Unknown — nie można określić łączności z Internetem.

Możesz sprawdzić, jakiego typu profil połączenia urządzenie aktywnie używa:

IEnumerable<ConnectionProfile> profiles = Connectivity.Current.ConnectionProfiles;

if (profiles.Contains(ConnectionProfile.WiFi))
{
    // Active Wi-Fi connection.
}

Za każdym razem, gdy profil połączenia lub dostęp do sieci zmieni się, ConnectivityChanged zdarzenie jest zgłaszane:

public class ConnectivityTest
{
    public ConnectivityTest() =>
        Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;

    ~ConnectivityTest() =>
        Connectivity.ConnectivityChanged -= Connectivity_ConnectivityChanged;

    void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
    {
        if (e.NetworkAccess == NetworkAccess.ConstrainedInternet)
            Console.WriteLine("Internet access is available but is limited.");

        else if (e.NetworkAccess != NetworkAccess.Internet)
            Console.WriteLine("Internet access has been lost.");

        // Log each active connection
        Console.Write("Connections active: ");

        foreach (var item in e.ConnectionProfiles)
        {
            switch (item)
            {
                case ConnectionProfile.Bluetooth:
                    Console.Write("Bluetooth");
                    break;
                case ConnectionProfile.Cellular:
                    Console.Write("Cell");
                    break;
                case ConnectionProfile.Ethernet:
                    Console.Write("Ethernet");
                    break;
                case ConnectionProfile.WiFi:
                    Console.Write("WiFi");
                    break;
                default:
                    break;
            }
        }

        Console.WriteLine();
    }
}

Ograniczenia

Ważne jest, aby wiedzieć, że istnieje możliwość Internet zgłoszenia, NetworkAccess ale pełny dostęp do internetu nie jest dostępny. Ze względu na sposób, w jaki działa łączność na każdej platformie, można jedynie zagwarantować, że połączenie jest dostępne. Na przykład urządzenie może być połączone z siecią Wi-Fi, ale router jest odłączony od Internetu. W tym wystąpieniu Internet może być zgłaszane, ale aktywne połączenie nie jest dostępne.