Dans quasi chacune de mes applications, il y’a un moment ou je dois vérifier que la connection à internet est active. Pour ce faire, microsoft nous donne accès à une API qui permet d’aller rechercher le profil du réseau de l’utilisateur et ensuite nous permet de vérifier l’état de la connection.
Voici le code qui permet de faire ceci :
bool isConnected = false; ConnectionProfile internetConnectionProfile = NetworkInformation.GetInternetConnectionProfile(); if (internetConnectionProfile == null) return false; var connectivityLevel = internetConnectionProfile.GetNetworkConnectivityLevel(); isConnected = connectivityLevel == NetworkConnectivityLevel.InternetAccess;
Durant mes développements,ce bout de code m’a levé plusieurs fois des exceptions. J’ai donc fais un helper de connection qui va gérer le cas ou ce bout de code ne fonctionne pas.
Le code suivant va tester la connectivité du profil de l’utilisateur. Si ça fonctionne et que tout va bien, la méthode va nous retourner true si on est connecté et false si on le l’est pas.. Si une exception est levé alors la méthode va faire une requête vers google.com et vérifier qu’on ai une réponse. Si on a une réponse, c’est qu’on est connecté, sinon on ne l’est pas.
En gros, cette méthode fera un double check si l’api de microsoft se met à faire des siennes.
Voici donc le code de l’helper :
public static class ConnectionHelper { public async static Task<bool> IsConnectedToInternet() { bool isConnected = false; try { ConnectionProfile internetConnectionProfile = NetworkInformation.GetInternetConnectionProfile(); if (internetConnectionProfile == null) return false; var connectivityLevel = internetConnectionProfile.GetNetworkConnectivityLevel(); isConnected = connectivityLevel == NetworkConnectivityLevel.InternetAccess; } catch (Exception) { isConnected = false; } if (!isConnected) return await GetInternetStatus(); else return isConnected; } public static async Task<bool> GetInternetStatus() { HttpWebRequest request; HttpWebResponse response = null; request = (HttpWebRequest)WebRequest.Create(new Uri("http://www.google.com")); try { response = (HttpWebResponse)await request.GetResponseAsync(); request.Abort(); request = null; response = null; return true; } catch { request.Abort(); request = null; return false; } } }
No Comments