Detectar si hay una conexión a Internet disponible en Android
Necesito detectar si el dispositivo Android está conectado a Internet.
La clase NetworkInfo
proporciona un método no estático isAvailable()
que suena perfecto.
El problema es que:
NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
// do something
}
arroja este error:
idioma: lang-none -->
The constructor NetworkInfo is not visible.
Seguro que hay otra clase que devuelve un objeto NetworkInfo
. Pero no sé cuál.
- ¿Cómo conseguir que el fragmento de código anterior funcione?
- ¿Cómo he podido encontrar yo mismo la información que necesitaba en la documentación en línea?
- ¿Puede sugerir una forma mejor para este tipo de detección?
665
3
El método
getActiveNetworkInfo()
deConnectivityManager
devuelve una instanciaNetworkInfo
que representa la primera interfaz de red conectada que puede encontrar onull
si ninguna de las interfaces está conectada. Comprobar si este método devuelvenull
debería ser suficiente para saber si hay una conexión a Internet disponible o no.También necesitarás:
en el manifiesto de tu androide.
Editar:
Ten en cuenta que tener una interfaz de red activa no garantiza que un determinado servicio en red esté disponible. Los problemas de red, el tiempo de inactividad del servidor, la baja señal, los portales cautivos, los filtros de contenido y similares pueden impedir que tu aplicación llegue a un servidor. Por ejemplo, no puedes saber con seguridad si tu aplicación puede llegar a Twitter hasta que recibas una respuesta válida del servicio de Twitter.
También otra nota importante. Tienes que establecer
android.permission.ACCESS_NETWORK_STATE
en tu AndroidManifest.xml para que esto funcione.Sólo tienes que leer bien la documentación de las clases y encontrarás todas las respuestas que buscas. Mira la documentación de ConnectivityManager. La descripción te dice lo que tienes que hacer.
Probablemente me he encontrado a mí mismo: