Detectar si hay una conexión a Internet disponible en Android [duplicado]
-
26-09-2019 - |
Pregunta
necesito para 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
}
lanza este error:
The constructor NetworkInfo is not visible.
apuesta seguro es que hay otra clase que devuelve un objeto NetworkInfo
. Pero no sé qué.
- ¿Cómo obtener el fragmento de código anterior al trabajo?
- ¿Cómo me he encontrado la información que necesita en la documentación en línea?
- ¿Puede sugerir una mejor manera para que este tipo de detección?
Solución
El método getActiveNetworkInfo()
de ConnectivityManager
devuelve una instancia NetworkInfo
que representa la primera red conectada interfaz se puede encontrar o null
si ninguna de las interfaces están conectados. Comprobación de si esto null
devuelve el método debería ser suficiente para decir 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á:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
en su manifiesto de Android.
Editar
Tenga en cuenta que tener una interfaz de red activa no garantiza que un servicio de red en particular está disponible. problemas de la red, el tiempo de inactividad del servidor, baja señal, portales cautivos, filtros de contenido y similares pueden prevenir toda su aplicación llegue a un servidor. Por ejemplo no se puede saber con certeza si su aplicación puede llegar a Twitter hasta que reciba una respuesta válida desde el servicio de Twitter.
Otros consejos
verifico tanto para Wi-Fi y conexión a 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 ser modificado fácilmente para comprobar si hay tipos de conexión específicos individuales, por ejemplo, si su aplicación necesita las velocidades potencialmente más altos de Wi-Fi para que funcione correctamente, etc.
Paso 1: Crear un AppStatus clase en su proyecto (que puede dar cualquier otro nombre también). Entonces, por favor pegue la figura a continuación las 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 comprobar si la conectividad de red a su dispositivo tiene entonces sólo tiene que añadir este fragmento de código donde cada vez que desea comprobar ...
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!!!!");
}
También otra nota importante. Usted tiene que fijar en su android.permission.ACCESS_NETWORK_STATE
AndroidManifest.xml para que esto funcione.
_ ¿cómo podría yo he encontrado la información que necesita en la documentación en línea?
Usted sólo tiene que leer la documentación de las clases lo suficientemente bien y usted encontrará todas las respuestas que está buscando. Echa un vistazo a la documentación sobre ConnectivityManager . La descripción que dice qué hacer.
El método getActiveNetworkInfo () de ConnectivityManager devuelve una ejemplo NetworkInfo que representa la primera red conectada interfaz se puede encontrar o nula si ninguno si las interfaces están conectados. Comprobación de si esto nula devuelve el método debería ser suficiente para decir si una conexión a Internet está disponible.
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
También necesitará:
en su androide manifiesto.
Editar:
Tenga en cuenta que tener una interfaz de red activa no garantiza que una servicio particular de red está disponible. problemática de las redes, servidores el tiempo de inactividad, baja señal, portales cautivos, los filtros de contenido y similares puede prevenir toda su aplicación llegue a un servidor. Por ejemplo, usted no se puede saber con certeza si su aplicación puede llegar a Twitter hasta que reciba una respuesta válida desde el servicio de Twitter.
getActiveNetworkInfo () no debe nunca darse nula. No sé lo que estaban pensando cuando se les ocurrió eso. Se le debe dar un objeto siempre.
Probablemente me he encontrado:
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();