Compartir a través de


Connectivity

Examinar ejemplo. Examinar el ejemplo

En este artículo se describe cómo puedes usar la interfaz IConnectivity de .NET Multi-platform App UI (.NET MAUI) para inspeccionar la accesibilidad de red del dispositivo. La conexión de red puede tener acceso a Internet. Los dispositivos también contienen diferentes tipos de conexiones de red, como Bluetooth, telefonía móvil o WiFi. La interfaz IConnectivity tiene un evento para supervisar los cambios en el estado de conexión de los dispositivos.

La implementación predeterminada de la interfaz IConnectivity está disponible a través de la propiedad Connectivity.Current. Tanto la interfaz IConnectivity como la clase Connectivity están contenidas en el espacio de nombres Microsoft.Maui.Networking.

Introducción

Para acceder a la funcionalidad Connectivity, se requiere la siguiente configuración específica para la plataforma.

El permiso AccessNetworkState es necesario y se debe configurar en el proyecto Android. Se puede agregar de las siguientes maneras:

  • Agrega el permiso basado en ensamblados:

    Abre el archivo Platforms/Android/MainApplication.cs y agrega los siguientes atributos de ensamblado después de las directivas using:

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

    O bien

  • Actualiza el manifiesto de Android:

    Abre el archivo Platforms/Android/AndroidManifest.xml y agrega esto en el nodo manifest:

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

    O bien

  • Actualiza el manifiesto de Android en el editor de manifiestos:

    En Visual Studio, haz doble clic en el archivo Platforms/Android/AndroidManifest.xml para abrir el editor de manifiestos de Android. Después, en Permisos necesarios, comprueba el permiso ACCESS_NETWORK_STATE. Esto actualizará automáticamente el archivo AndroidManifest.xml.

Usar Connectivity

Puedes determinar el ámbito de la red actual comprobando la propiedad NetworkAccess.

NetworkAccess accessType = Connectivity.Current.NetworkAccess;

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

El acceso a la red se incluye en las siguientes categorías:

  • Internet: acceso a Internet y local.
  • ConstrainedInternet: acceso a Internet limitado. Este valor significa que hay un portal cautivo, donde se proporciona acceso local a un portal web. Una vez que se usa el portal para proporcionar credenciales de autenticación, se concede acceso a Internet.
  • Local: solo acceso a la red local.
  • None: no hay ningún elemento connectivity disponible.
  • Unknown: no se puede determinar connectivity de internet.

Puede comprobar qué tipo de perfil de conexión el dispositivo usa de manera activa:

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

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

Cada vez que cambia el perfil de conexión o el acceso a la red, se genera el 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();
    }
}

Limitaciones

Es importante tener en cuenta que puede que NetworkAccess informe sobre Internet, pero no hay disponible acceso total a la Web. Debido al modo en que funciona connectivity en cada plataforma, solo se puede garantizar que existe una conexión. Por ejemplo, es posible que el dispositivo esté conectado a una red WiFi, pero el enrutador no está conectado a Internet. En esta instancia, puede que se indique Internet, pero no hay disponible ninguna conexión activa.