El tutor de nuestro curso online de Desarrollo de Aplicaciones para Android, Víctor Ramírez Las,…
Aplicación Android: obtención de datos conexión Wifi
2.
ADB Wifi
4.
Aplicación Android: obtención de datos conexión Wifi
Vamos a crear una sencilla aplicación Android utilizando la clase WifiManager, que nos va a permitir obtener los datos relativos a la conexión WIFI con nuestro dispositivo Android.
Elementos necesarios:
- 6 componentes de tipo Button, para gestionar las diferentes funcionalidades de la aplicación.
- 5 componentes de tipo TextView, que recibirán los valores de la conexión realizada con el dispositivo Android.
Como es habitual, podrás descargar todo el código del Proyecto al final de este tutorial.
Vemos una imagen de la Aplicación en ejecución:
ConexionWIFI/src/com.academiaandroid.conexionwifi/MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
public class MainActivity extends ActionBarActivity { //Declaramos los componentes necesarios para mostrar la información de la conexión de red private TextView estado; private TextView ping; private TextView ip; private TextView velocidad; private TextView conexionInalambrica; //Clase que nos proporcionada la gestión de todos los aspectos de una conexión Wifi. Ver nota 1 abajo private WifiManager wifi; [...] //Enlazamos los componentes con los recursos definidos a nivel de layout. estadoTV = (TextView)findViewById(R.id.txtEstado); pingTV = (TextView)findViewById(R.id.txtPing); ipTV = (TextView)findViewById(R.id.txtIP); velocidadTV = (TextView)findViewById(R.id.txtVelocidad); conexionInalambricaTV = (TextView)findViewById(R.id.txtNombre); wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); [...] //Evento On Click que reiniciará los valores de cada componente TextView definido. public void reiniciarValores(View view) { try { estadoTV.setTextColor(0xFF000000); estadoTV.setText("Sin Estado"); pingTV.setTextColor(0xFF000000); pingTV.setText("Sin Ping"); ipTV.setTextColor(0xFF000000); ipTV.setText("Sin IP"); velocidadTV.setTextColor(0xFF000000); velocidadTV.setText("Sin Velocidad"); conexionInalambricaTV.setTextColor(0xFF000000); conexionInalambricaTV.setText("Sin Nombre"); }catch(Exception ex) { ex.getMessage(); } } [...] //Evento On Click que muestra si hay una conexión establecida mediante WIFI public void mostrarEstado(View view) { try { //Método que devuelve un valor de verdadero o falso si se ha establecido la conexión Wifi. boolean estadoWifi = wifi.isWifiEnabled(); String estado_conexion; if(estadoWifi == true) { estadoTV.setTextColor(0xFF0000FF); estado_conexion = "Conectado!!!"; estadoTV.setText(estado_conexion); Toast.makeText(this, "Estado Conexión: " + estado_conexion, Toast.LENGTH_LONG).show(); }else { estadoTV.setTextColor(0xFF0000FF); estado_conexion = "Desconectado!!!"; estadoTV.setText(estado_conexion); Toast.makeText(this, "Estado Conexión: " + estado_conexion, Toast.LENGTH_LONG).show(); } }catch(Exception ex) { ex.getMessage(); } } [...] //Evento On Click que comprueba si el dispositivo responde con la IP Local establecida public void hacerPing(View view) { try { //Método que devuelve un valor de verdadero o falso si responde a la IP Local asignada. boolean ip_ping = wifi.pingSupplicant(); if(ip_ping == true) { pingTV.setTextColor(0xFF0000FF); pingTV.setText("IP con conectividad TCP/IP"); Toast.makeText(this, "IP con conectividad TCP/IP", Toast.LENGTH_LONG).show(); } else { pingTV.setTextColor(0xFF0000FF); pingTV.setText("IP sin conectividad TCP/IP"); Toast.makeText(this, "IP sin conectividad TCP/IP", Toast.LENGTH_LONG).show(); } }catch(Exception ex) { ex.getMessage(); } } [...] //Evento On Click que muestra la IP Local asignada al dispositivo Android. public void mostrarIP(View view) { try { @SuppressWarnings("deprecation") //Método que devuelve el valor de la IP Local asignada al dispositivo. No soporta IPv6. Se recomienda el uso de la Clase InetAddress (ver nota 2 abajo String ip_local = Formatter.formatIpAddress(wifi.getConnectionInfo().getIpAddress()); ipTV.setTextColor(0xFF0000FF); ipTV.setText(ip_local); Toast.makeText(this, "IP Local: " + ip_local, Toast.LENGTH_LONG).show(); }catch (Exception e) { e.printStackTrace(); } } [...] //Evento On Click que muestra la velocidad de transmisión de datos entre el router y el dispositivo Android public void mostrarVelocidad(View view) { try { //Método que devuelve el valor de la conexión Wifi, si está activa (si no está activa muestra -1Mbps) WifiInfo info = wifi.getConnectionInfo(); String puertoDatos = String .valueOf(info.getLinkSpeed()); velocidadTV.setTextColor(0xFF0000FF); velocidadTV.setText(puertoDatos + "Mbps"); Toast.makeText(this, "Velocidad de Red: " + puertoDatos + "Mbps", Toast.LENGTH_LONG).show(); } catch (Exception e) { e.getMessage(); } } [...] //Evento On CLick encargado de mostrar el identificador de la red Wifi a la que se ha conectado. public void mostrarNombreConexion(View view) { try { //Método que devuelve el identificador de servicio de la red Wifi 802.11 String red = wifi.getConnectionInfo().getSSID(); if(red == null) { conexionInalambricaTV.setTextColor(0xFF0000FF); conexionInalambricaTV.setText("Sin Red"); Toast.makeText(this, "Prueba de red: " + red, Toast.LENGTH_LONG).show(); }else { conexionInalambricaTV.setTextColor(0xFF0000FF); conexionInalambricaTV.setText(red); Toast.makeText(this, "Prueba de red: " + red, Toast.LENGTH_LONG).show(); } }catch (Exception e) { e.getMessage(); } } [...] |
Notas al código anterior:
- (1) Clase WifiManager:http://developer.android.com/reference/android/net/wifi/WifiManager.html
- (2) Se recomienda el uso de la clase InetAddress: http://developer.android.com/reference/java/net/InetAddress.html
ConexionWIFI/res/layout/activity_main.xml
Se utiliza a modo de ejemplo una fila de la tabla, ya que se definen por cada TextView, un componente de tipo Button, dentro de un <TableRow> (todos los <TableRow> definidos se engloban dentro de un <TableLayout>):
Podemos ver una imagen, con la estructura de los componentes definidos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
[...] <TableLayout android:layout_width="match_parent" android:layout_height="match_parent" > <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Datos Conexión TCP/IP." android:textAppearance="?android:attr/textAppearanceLarge" /> <Button android:id="@+id/btnReiniciar" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="reiniciarValores" android:text="Reniciar" /> </TableRow> [...] </TableLayout> [...] |
Vemos una comparación de los resultados obtenidos, compilando el proyecto en un emulador y en un dispositivo físico:
Emulador:
Dispositivo físico:
Descarga del Proyecto
Aquí puedes descargar todo el código de esta aplicación
Download