c# - development - windows 10 developer
Cómo verificar el tipo de conectividad de internet en la plataforma universal de Windows (2)
Me gustaría verificar el tipo de conectividad de internet en la aplicación universal de Windows.
- No conectado
- Conectado a través de WLAN (WiFi)
- Conectado a través de WWAN (datos celulares)
- Conectado a una red medida
con el fin de proporcionar una opción para descargar contenido de gran tamaño. Y también sentir los cambios significativos en la disponibilidad de la red.
Actualmente, solo puedo comprobar si Internet está conectado o no usando el método GetIsNetworkAvailable
de la clase NetworkInterface
.
NetworkInterface.GetIsNetworkAvailable();
1. Comprobar la disponibilidad de la conexión a Internet
Para verificar si Internet conectado o no usa el método GetIsNetworkAvailable
de la clase NetworkInterface
.
bool isInternetConnected = NetworkInterface.GetIsNetworkAvailable();
GetIsNetworkAvailable () -
Resumen: indica si hay alguna conexión de red disponible.
Devuelve:true
si hay una conexión de red disponible; de lo contrario,false
.
2. Comprobar la disponibilidad de la conexión a Internet a través de WWLN (WiFi)
Para verificar si Internet conectado a través de WWAN usa la propiedad IsWlanConnectionProfile
de la clase ConnectionProfile
ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile();
bool isWLANConnection = (InternetConnectionProfile == null)?false:InternetConnectionProfile.IsWlanConnectionProfile;
IsWlanConnectionProfile
Resumen: Obtiene un valor que indica si el perfil de conexión es una conexión WLAN (WiFi). Esto determina si WlanConnectionProfileDetails es nulo o no.
Devoluciones: Indica si el perfil de conexión representa una conexión WLAN (WiFi).
3. Comprobar la disponibilidad de la conexión a Internet a través de WWAN (móvil)
Para comprobar si Internet conectado a través de WWAN usa la propiedad IsWwanConnectionProfile
de la clase ConnectionProfile
ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile();
bool isWLANConnection = (InternetConnectionProfile == null)?false:InternetConnectionProfile.IsWwanConnectionProfile;
IsWwanConnectionProfile
Resumen: Obtiene un valor que indica si el perfil de conexión es una conexión WWAN (móvil). Esto determina si WwanConnectionProfileDetails es nulo o no.
Devoluciones: Indica si el perfil de conexión representa una conexión WWAN (móvil).
Referencia
Respuesta Hippiehunter
4. Comprobar la red medida
Para verificar si se puede acceder a Internet a través de una conexión medida o no, use el método GetConnectionCost
en la clase NetworkInterface
.
var connectionCost = NetworkInformation.GetInternetConnectionProfile().GetConnectionCost();
if (connectionCost.NetworkCostType == NetworkCostType.Unknown
|| connectionCost.NetworkCostType == NetworkCostType.Unrestricted)
{
//Connection cost is unknown/unrestricted
}
else
{
//Metered Network
}
Referencia (respuesta más detallada aquí)
1. https://msdn.microsoft.com/en-us/library/windows/apps/xaml/JJ835821(v=win.10).aspx
2. https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.networking.connectivity.networkcosttype.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
5. Gestionar los cambios de disponibilidad de la red.
Para detectar los cambios significativos en la disponibilidad de la red, use el evento NetworkStatusChanged
de la clase NetworkInformation
// register for network status change notifications
networkStatusCallback = new NetworkStatusChangedEventHandler(OnNetworkStatusChange);
if (!registeredNetworkStatusNotif)
{
NetworkInformation.NetworkStatusChanged += networkStatusCallback;
registeredNetworkStatusNotif = true;
}
async void OnNetworkStatusChange(object sender)
{
// get the ConnectionProfile that is currently used to connect to the Internet
ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile();
if (InternetConnectionProfile == null)
{
await _cd.RunAsync(CoreDispatcherPriority.Normal, () =>
{
rootPage.NotifyUser("Not connected to Internet/n", NotifyType.StatusMessage);
});
}
else
{
connectionProfileInfo = GetConnectionProfile(InternetConnectionProfile);
await _cd.RunAsync(CoreDispatcherPriority.Normal, () =>
{
rootPage.NotifyUser(connectionProfileInfo, NotifyType.StatusMessage);
});
}
internetProfileInfo = "";
}
Referencias
https://developerinsider.co/check-internet-connectivity-in-uwp/ https://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj835820.aspx https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh452991.aspx https://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj835820.aspx https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh452991.aspx
Espero que sea de ayuda a alguien.
Yo uso NetworkInformation.GetInternetConnectionProfile().IsWlanConnectionProfile
y IsWwanConnectionProfile
. Si ninguno de los dos es true
, debería significar que estás en Ethernet o algo así.
Tenga en cuenta que GetInternetConnectionProfile()
puede devolver nulo y falsamente puede devolver que hay una conexión activa a Internet cuando la conexión está activa pero DHCP ha fallado.