2017-10-20 7 views
0

J'ai un code qui teste si une connexion wifi est disponible.La connexion Wifi fonctionne malgré le point d'accès

public boolean checkInternetConnection() { 

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
if (netInfo != null && netInfo.isConnected()) { 
    try { 
     URL url = new URL("http://www.google.com"); 
     HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
     urlc.setRequestProperty("User-Agent", "Test"); 
     urlc.setRequestProperty("Connection", "close"); 
     urlc.setConnectTimeout(3000); 
     urlc.setReadTimeout(4000); 
     urlc.connect(); 
     if (urlc.getResponseCode() == HttpURLConnection.HTTP_OK) { 
      Log.i(TAG,"Internet connection is OK"); 
      return true; 
      } 
     } catch (MalformedURLException mue) { 
       mue.printStackTrace(); 
     } catch (IOException ie) { 
       ie.printStackTrace(); 
     } 
    } 
    Log.i(TAG, "No internet connection."); 
    return false; 
} 

Pour accéder à l'Internet, je dois par un point d'accès, ce pourquoi je espacially ping google parce que je besoin si nous sommes également connecté. J'ai remarqué que dans de nombreux cas, même si je ne consignent pas dans le portail captif, le seuil de code atteint google et renvoie true. Je suis également capable de serveurs Internet, tels que ftp. Est-ce que quelqu'un sait quelle est la cause de ce comportement? Est-ce que quelqu'un d'autre a remarqué ce comportement?

Merci,

+0

Je ne vous vois pas cingler google. Ni un login. Ni un portail captif. Quoi que ce soit. – greenapps

Répondre

0

Certains portails captifs permettent l'accès sans se connecter à un ensemble limité de services (par exemple le site de la société du corporatiste propriétaire du service Wi-Fi). J'ai vu la page d'accueil de Google autorisée dans certains points d'accès Wi-Fi que j'ai utilisés au fil des ans. C'est peut-être ce que vous avez remarqué. Peut-être une meilleure approche (ou supplémentaire) serait de vérifier l'état détaillé du réseau NetworkInfo.html#getDetailedState() qui vous donne également des informations sur la détection de portail captif. En outre, vérifier une page spécifique dans vos propres serveurs peut aider (est moins susceptible d'être autorisé sans se connecter), et le faire via HTTPS au lieu du simple HTTP peut vous donner des informations supplémentaires (il est assez courant d'obtenir un certificat ne correspond pas à l'erreur car les portails captifs agissent comme un homme-dans-le-milieu).

+0

J'ai ajouté NetworkInfo.html # getDetailedState() dans le code ci-dessus. J'ai essayé sans me connecter au portail et j'ai obtenu l'état CONNECTED et la fonction chechInternet est redevenue vraie. Bien que, cette fois, je n'ai pas pu atteindre le serveur étranger, même si cela fonctionne parfois (ce qui n'est pas mon serveur, je n'en ai pas). J'ai essayé après la connexion au portail et j'ai reçu la même réponse CONNECTED. – AudVid

+1

Lors de la deuxième révision de votre code, vous ne vérifiez pas vraiment que vous atteignez google.com. Vous vérifiez juste que vous obtenez une page avec un 200 Ok, mais vous ne savez pas si cette page est vraiment google.com ou le portail captif. Si vous modifiez l'URL sur https://www.google.com (comme je l'ai déjà indiqué dans ma réponse), vous obtiendrez probablement une erreur de certificat, ce qui vous permettra de vérifier plus précisément la connectivité. –

+0

Merci encore pour votre aide. J'ai essayé de changer l'url d'URL = nouvelle URL ("http://www.google.com"); à URL url = nouvelle URL ("google.com"); et java.net.MalformedURLException: Protocole introuvable: google.com mais je pense que j'ai mal compris ce que vous avez demandé. – AudVid