16/01/2013
Siempre que en una app necesitemos conectividad, es una buena práctica comprobar que la tenemos disponible antes de solicitar cualquier operación y esperar a recibir un timeout o error similar. Para ello hay que hacer uso de ConnectivityManager y NetworkInfo , yo siempre utilizo el siguiente snippet:
private boolean isNetworkConnected(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context .CONNECTIVITY_SERVICE); NetworkInfo info = connectivityManager.getActiveNetworkInfo(); if (info == null || !info.isConnected() || !info.isAvailable()) { return false; } return true; }
Para que este código funcione, es necesario un permiso especial para acceder al estado de la red, con el permiso para usar la conexión a Internet(«android.permission.INTERNET») no es suficiente:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
El código anterior es muy básico, y si fuera necesario se puede obtener más información sobre la conexión activa a través del método getType() y saber el tipo de conexión usando algunas de las constantes definidas en ConnectivityManager:
info.getType()–>ConnectivityManager.TYPE_MOBILE, ConnectivityManager.TYPE_WIFI, ConnectivityManager.TYPE_WIMAX…
Si hacemos un uso intensivo de datos, quizás sea necesario dar al usuario la posibilidad de configurar la aplicación para que sólo utilice la conexión a Internet via WIFI, o avisarle de esta situación debido al coste económico que podría suponer. Asimismo, en el caso de que la conexión sea de tipo móvil también podemos averiguar exactamente su tipo con las constantes definidas en TelephonyManager:
info.getSubtype()->TelephonyManager.NETWORK_TYPE_UMTS, TelephonyManager.NETWORK_TYPE_LTE, TelephonyManager.NETWORK_TYPE_GPRS…
me ha funcionado en varios mobiles pero no logro hacer que corra en un cel con android 2.3
Por si te sirve de algo, a mi me funciona en la Galaxy Ace con Android 2.3.6.
bueno la versión que uso es del android sdk 10 y el movil 2.3.4
Hola, muy bueno el código y sencillo, pero sólo nos dice que esta conectado a una red wifi no que tenga internet o no.
Gracias por la corrección, ya he cambiado el título para que sea más preciso.
donde va ese código??
Donde lo necesites y tengas acceso al Context, generalmente lo harás en una Activity como en el ejemplo (this.getSystemService(…)
Amigo, intente solo colocar el codigo sin hacer llamada a el, Solo para luego colocar un Boton y ver como llamo a este codigo, , importe las dos librerias, pero me muestra un mensaje en el siguiente mensaje
Cant not resolve ‘Context’
Soy nuevo en todo lo que es Java y Android Studio, en realidad quiero hacer una pequeña APP para las Tablet en una Escuela, que haga esto:
1.- Chequear que esta conectada a una Wifi (Cada 10 Minutos entre 07:00 am y 2:00pm)
2.- Comparar el nombre de la Wifi con una lista (Tomada de un File o simplemente colocarlar fijas (‘WF-Grado1’ , ‘WF-Grado2’ , etc)
3.- Si esta conectada y es una de las Wifis en la lista:
3.1 Enviar a un server una lista de las APP instaladas
3.2 Enviar a un server una lista de las APP Corriendo en ese momento
Creo que no es muy complejo, se que la APP necesita permisos, pero es lo de menos, es solo para generar estadisticas de USO.