Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android: detecta si Wifi requiere acceso al navegador

Mi universidad tiene un punto de acceso wifi abierto, sin embargo, requiere que usted ingrese su e-mail antes de que le permite usar la web. Mi problema es que el Wifi es estúpido en que parece que cae mi conexión y me obligan a entrar en mi correo electrónico cada 10 minutos.

Quería crear mi propia aplicación que puedo utilizar para hacer automáticamente este paso para mí, pero no puedo encontrar ninguna documentación para una manera agradable y fácil de detectar si un punto de acceso Wifi tiene una página de inicio de sesión del navegador. ¿Hay alguna manera en Android para obtener esta información, o es sólo para ver si mi conexión a algo siempre se redirige a 1.1.1.1?

4 Solutions collect form web for “Android: detecta si Wifi requiere acceso al navegador”

Consulte la sección " HttpUrlConnection la HttpUrlConnection la HttpUrlConnection " de la documentación HttpUrlConnection :

Algunas redes Wi-Fi bloquean el acceso a Internet hasta que el usuario hace clic en una página de inicio de sesión. Tales páginas de inicio de sesión se suelen presentar utilizando redireccionamientos HTTP. Puede usar getURL () para probar si su conexión ha sido redirigida inesperadamente. Esta comprobación no es válida hasta después de recibir los encabezados de respuesta, que puede activar llamando a getHeaderFields () o getInputStream ().

Tienen un fragmento de código de ejemplo allí. Si esto cubrirá su AP de WiFi en particular, no puedo decir, pero vale la pena una oportunidad.

Haga ping a una dirección IP externa (como google.com) para ver si responde.

  try { Runtime runtime = Runtime.getRuntime(); Process proc = runtime.exec("ping -c 1 " + "google.com"); proc.waitFor(); int exitCode = proc.exitValue(); if(exitCode == 0) { Log.d("Ping", "Ping successful!"; } else { Log.d("Ping", "Ping unsuccessful."); } } catch (IOException e) {} catch (InterruptedException e) {} 

El único inconveniente es que esto también indicaría que un inicio de sesión web es necesario cuando no hay simplemente conexión a Internet en el punto de acceso WiFi.

@CommonsWare Creo que esta es una mejor respuesta que abrir una UrlConnection y comprobar el host, ya que el host no siempre cambia incluso cuando se muestra la página de redireccionamiento. Por ejemplo, he probado en un enrutador Belkin y deja todo lo que escribió en el navegador como está, pero todavía muestra su propia página. urlConnection.getUrl (). getHost () devuelve lo que debería debido a esto.

Creo que @FlyWheel está en el camino correcto, pero usaría http://clients1.google.com/generate_204 y si no obtienes un 204, sabes que estás detrás de un portal cautivo. Puedes ejecutar esto en un bucle hasta que consigues un 204 en cuyo caso ya sabes que ya no estás detrás de un portal cautivo.

@FlyWheel escribió: El único inconveniente es que esto también indicaría que un inicio de sesión web es necesario cuando no hay simplemente conexión a Internet en el punto de acceso WiFi.

Puede solucionar esto registrando un receptor en android.net.conn.CONNECTIVITY_CHANGE. Usted puede comprobar si Wifi está ENCENDIDO y está conectado mirando el estado del Supplicant de la conexión.

He aquí un fragmento, pero no lo ejecuté:

 WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wm.getConnectionInfo(); SupplicantState suppState = wifiInfo.getSupplicantState(); if (wm.isWifiEnabled()) { if (suppState == SupplicantState.COMPLETED){ // TODO - while loop checking generate_204 (FlyWheels code)Using intent service. } } 

No puedo recordar si el SupplicantState está COMPLETADO o ASOCIADO, usted tendrá que comprobar eso. Debe utilizar un IntentService para comprobar el generate_204 ya que los receptores de difusión tienen una vida útil corta.

El problema podría ser – al menos hoy – que las nuevas versiones de Android (5,1 +?) Mantener la conexión 3G / 4G hasta y funcionando hasta que la conexión wifi en realidad conduce a una conexión wifi totalmente funcional.

No lo he probado, pero tal vez con el valor enum CAPTIVE_PORTAL_CHECK de NetworkInfo s DetailedState uno puede tratar de detectar este modo correctamente?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.