Connectivity
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.