Android: Cómo encender o apagar el wifi desde la consola

Una de las condiciones necesarias para que tu aplicación Android sea awesómica, es que debe detectar correctamente cuando pierde la conexión o cuando ésta vuelve y reaccionar en consecuencia, ya sea mostrando un aviso al usuario o poniendo en cola las peticiones web que vayamos a hacer. Y hay veces que tenemos que probar esta circunstancia pero no queremos salir de la actividad para no provocar eventos onPause/onResume, etc.

Para conseguir esto podemos preparar un BroadcastReceiver que se encargue de cambiar el setting del wifi ya sea a encendido o a apagado en función de un extra que pasaremos en el intent que enviemos por broadcast, éste receiver cogerá el intent y cambiará el estado del wifi, lo que provocará que Android envíe otro broadcast indicando que ha habido un cambio en la conectividad. (Para saber como recibir este intent lo puedes leer aquí http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

1
2
3
4
5
6
public class ChangeWifiState extends BroadcastReceiver {
    public void onReceive(Context c, Intent intent) {
        WifiManager wfm = (WifiManager) c.getSystemService(Context.WIFI_SERVICE);  
        wfm.setWifiEnabled(Boolean.parseBoolean(intent.getStringExtra("wifi")));
    }
}

Después lo declaramos en el AndroidManifest.xml junto con el permiso de cambiar el estado del wifi. Como hace falta un permiso para hacer esto, puede que no quieras ponerlo en tu aplicación sino en otra aplicación que tengas instalada y uses para pruebas. Por eso ponemos el atributo exported=”true”, para poder usarlo desde otro aplicación.

1
2
3
4
5
6
7
<receiver android:name="ChangeWifiState" android:exported="true" >
    <intent-filter>
        <action android:name=">WifiChange" />
    </intent-filter>
</receiver>
 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

Y ya está todo el código necesario, ahora, con el teléfono conectado, podemos usar adb para enviar un intent a ese receiver con el parámetro Wifi puesto a true o false para encender o apagar la conectividad wifi respectivamente, y android enviará el broadcast con el action CONNECTIVITY_CHANGE y podremos ver si lo estamos manejando correctamente o no en nuestra aplicación.

El comando que tenemos que poner en la consola es el siguiente:

adb shell am broadcast -a WifiChange -c android.intent.category.DEFAULT -n com.your.packageName/.ChangeWifiState -e wifi [boolean]

donde:
-a define el Intent Action
-c define la categoria del intent
-n define la clase que recibe el intent
-e el extra y su valor
[boolean] puede ser true o false.

También publicado en Google Plus https://plus.google.com/110502863648146989289/posts

Published by

Fernando F. Gallego

Desarrollador de junaio Augmented Reality para Android desde Munich. Me encanta cacharrear y probar ideas y conceptos nuevos para aprender. Tengo tantos pet projects que podría montar un zoo de aplicaciones. Además me encanta el sushi, los gintonics, los zombies y los smartphones. Puedes encontrarme en twitter como @ferdy182