tengo - Detectar si hay una conexión a Internet disponible en Android
hacer ping android studio (6)
El método getActiveNetworkInfo () de ConnectivityManager devuelve una instancia de NetworkInfo que representa la primera interfaz de red conectada que puede encontrar o nula si no hay ninguna si las interfaces están conectadas. Comprobar si este método devuelve nulo debería ser suficiente para saber si hay una conexión a Internet disponible.
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
También necesitarás:
en su manifiesto android.
Editar:
Tenga en cuenta que tener una interfaz de red activa no garantiza que un servicio de red en particular esté disponible. Los problemas de redes, el tiempo de inactividad del servidor, la baja señal, los portales cautivos, los filtros de contenido y similares pueden impedir que su aplicación llegue a un servidor. Por ejemplo, no puede estar seguro de si su aplicación puede acceder a Twitter hasta que reciba una respuesta válida del servicio de Twitter.
getActiveNetworkInfo () nunca debe dar un valor nulo. No sé qué estaban pensando cuando se les ocurrió eso. Debería darte un objeto siempre.
Posible duplicado:
¿Cómo comprobar el acceso a internet en Android? InetAddress nunca los tiempos de espera
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:
The constructor NetworkInfo is not visible.
La apuesta segura es que hay otra clase que devuelve un objeto NetworkInfo
. Pero no sé cuál.
- ¿Cómo hacer que funcione el fragmento de código anterior?
- ¿Cómo pude encontrar la información que necesitaba en la documentación en línea?
- ¿Puede sugerir una mejor manera para este tipo de detección?
El método getActiveNetworkInfo()
de ConnectivityManager
devuelve una instancia de NetworkInfo
representa la primera interfaz de red conectada que puede encontrar o que es null
si ninguna de las interfaces está conectada. Comprobar si este método devuelve null
debería ser suficiente para saber si una conexión a Internet está disponible o no.
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
También necesitarás:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
en su manifiesto android.
Editar:
Tenga en cuenta que tener una interfaz de red activa no garantiza que un servicio de red en particular 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 su aplicación llegue a un servidor. Por ejemplo, no puede estar seguro de si su aplicación puede acceder a Twitter hasta que reciba una respuesta válida del servicio de Twitter.
Paso 1: Cree un estado de la aplicación de clase en su proyecto (también puede dar cualquier otro nombre). Luego pegue las siguientes líneas en su código:
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
public class AppStatus {
private static AppStatus instance = new AppStatus();
static Context context;
ConnectivityManager connectivityManager;
NetworkInfo wifiInfo, mobileInfo;
boolean connected = false;
public static AppStatus getInstance(Context ctx) {
context = ctx.getApplicationContext();
return instance;
}
public boolean isOnline() {
try {
connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
connected = networkInfo != null && networkInfo.isAvailable() &&
networkInfo.isConnected();
return connected;
} catch (Exception e) {
System.out.println("CheckConnectivity Exception: " + e.getMessage());
Log.v("connectivity", e.toString());
}
return connected;
}
}
Paso 2: Ahora, para verificar si su dispositivo tiene conectividad de red, simplemente agregue este fragmento de código donde quiera que quiera verificar ...
if (AppStatus.getInstance(this).isOnline()) {
Toast.makeText(this,"You are online!!!!",8000).show();
} else {
Toast.makeText(this,"You are not online!!!!",8000).show();
Log.v("Home", "############################You are not online!!!!");
}
Probablemente me he encontrado:
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
También otra nota importante. Debes configurar android.permission.ACCESS_NETWORK_STATE
en tu AndroidManifest.xml para que esto funcione.
_ ¿cómo podría haber encontrado la información que necesitaba en la documentación en línea?
Solo tiene que leer la documentación y las clases correctamente y encontrará todas las respuestas que busca. Echa un vistazo a la documentación en ConnectivityManager . La descripción te dice qué hacer.
Verifico si hay Wi-fi e Internet móvil de la siguiente manera ...
private boolean haveNetworkConnection() {
boolean haveConnectedWifi = false;
boolean haveConnectedMobile = false;
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
haveConnectedWifi = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
haveConnectedMobile = true;
}
return haveConnectedWifi || haveConnectedMobile;
}
Obviamente, podría modificarse fácilmente para verificar tipos de conexión específicos individuales, por ejemplo, si su aplicación necesita las velocidades potencialmente más altas de Wi-Fi para funcionar correctamente, etc.