Si tu aplicación consume información por Internet, no se te olvide que pueden pasar varias cosas, entre una de ellas es, que el dispositivo no tenga conexión a Internet en ese momento.
Aunque muchos lo ignoran es importante mostrar al usuario cuando ocurre esto y no simplemente un error genérico. La buena noticia es que es muy fácil.
El código
Pedimos permisos para acceder al estado de la conexión. Solicitado (colócalo) en el AndroidManifest.xml.
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Luego con el siguiente trozo verificas si estas o no conectado en ese instante.
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
// Si hay conexión a Internet en este momento
} else {
// No hay conexión a Internet en este momento
}
La lectura es natural, tienes un administrador de conexiones al cual le pides cual es la red actual, para luego preguntar con el método isConnected()
si estamos conectados.
Otros métodos
Con la variable de networkInfo
puedes obtener más información de la conexión.
Para obtener el estado actual
networkInfo.getState()
Retorna el estado actual que puede ser:
CONNECTING
CONNECTED
SUSPENDED
DISCONNECTING
DISCONNECTED
UNKNOWN
Para obtener el tipo de red a la cual se esta conectado
networkInfo.getType()
Te retornará un número que representa al tipo de red al cual estas conectado.
ConnectivityManager.TYPE_MOBILE
ConnectivityManager.TYPE_WIFI
ConnectivityManager.TYPE_ETHERNET
ConnectivityManager.TYPE_WIMAX
ConnectivityManager.TYPE_BLUETOOTH
Entre otros valores.
Obtener información extra
networkInfo.getExtraInfo()
Te puede retornar (como te dice su nombre) alguna información extra, por ejemplo como se llama la red Wi-Fi a la cual estas conectado.
Un ejemplo
Puedes poner este código en tu activity y comprobar que te muestra, no olvides pedir el permiso mencionado en el AndroidManifest.xml.
No olvides que puedes poner este código en un método estático que sea un utilitario para que puedas llamarlo en cualquier parte de tu aplicación. Tus usuarios te lo agradecerán.