Condividi tramite


Connectivity

Sfogliare l'esempio. Esplorare l'esempio

Questo articolo descrive come usare l'interfaccia dell'interfaccia dell'app multipiattaforma .NET (.NET MAUI) IConnectivity per esaminare l'accessibilità di rete del dispositivo. La connessione di rete può avere accesso a Internet. I dispositivi contengono anche diversi tipi di connessioni di rete, ad esempio Bluetooth, cellulare o Wi-Fi. L'interfaccia IConnectivity ha un evento per monitorare le modifiche apportate allo stato della connessione dei dispositivi.

L'implementazione predefinita dell'interfaccia IConnectivity è disponibile tramite la Connectivity.Current proprietà . Sia l'interfaccia che Connectivity la IConnectivity classe sono contenute nello spazio dei Microsoft.Maui.Networking nomi .

Operazioni preliminari

Per accedere alla Connectivity funzionalità, è necessaria la configurazione specifica della piattaforma seguente.

L'autorizzazione AccessNetworkState è obbligatoria e deve essere configurata nel progetto Android. È possibile aggiungerla nei modi seguenti:

  • Aggiungere l'autorizzazione basata su assembly:

    Aprire il file Platforms/Android/MainApplication.cs e aggiungere gli attributi assembly seguenti dopo using le direttive:

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

    o

  • Aggiornare il manifesto Android:

    Aprire il file Platforms/Android/AndroidManifest.xml e aggiungere quanto segue nel manifest nodo:

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

    o

  • Aggiornare il manifesto Android nell'editor del manifesto:

    In Visual Studio fare doppio clic sul file Platforms/Android/AndroidManifest.xml per aprire l'editor del manifesto Android. Quindi, in Autorizzazioni necessarie controllare l'autorizzazione ACCESS_NETWORK_STATE . Il file AndroidManifest.xml verrà aggiornato automaticamente.

uso di Connectivity

È possibile determinare l'ambito della rete corrente controllando la NetworkAccess proprietà .

NetworkAccess accessType = Connectivity.Current.NetworkAccess;

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

Le categorie disponibili per NetworkAccess sono le seguenti:

  • Internet — Accesso locale e a Internet.
  • ConstrainedInternet — Accesso a Internet limitato. Questo valore significa che è disponibile un portale captive, in cui viene fornito l'accesso locale a un portale Web. Dopo aver usato il portale per fornire le credenziali di autenticazione, viene concesso l'accesso a Internet.
  • Local — Solo accesso alla rete locale.
  • None — Non connectivity è disponibile.
  • Unknown — Impossibile determinare Internet connectivity.

È possibile controllare il tipo di profilo di connessione in uso nel dispositivo:

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

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

Ogni volta che cambia il profilo di connessione o l'accesso alla rete, viene generato l'evento ConnectivityChanged :

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();
    }
}

Limiti

È importante sapere che è possibile che Internet venga segnalato da NetworkAccess ma l'accesso completo al Web non è disponibile. A causa di come connectivity funziona su ogni piattaforma, può garantire solo che sia disponibile una connessione. Ad esempio, il dispositivo può essere connesso a una rete Wi-Fi, ma il router è disconnesso da Internet. In questa istanza Internet può essere segnalato, ma non è disponibile una connessione attiva.