Android.net.wifi.STATE_CHANGE: no se activa en Wifi desconectar

¿Es normal tener una intención de difusión con la acción NETWORK_STATE_CHANGED_ACTION (cuyo valor constante es android.net.wifi.STATE_CHANGE ) cuando una conexión Wifi vuelve a subir? Es decir, no obtengo este intento cuando se está desconectando Wifi.

ACTUALIZACIÓN: Estoy principalmente interesado en> = 2.2 Froyo

Public static final Cadena SUPPLICANT_CONNECTION_CHANGE_ACTION

Desde: API Nivel 1

Acción de intención de difusión que indica que se ha establecido una conexión con el solicitante (y ahora es posible realizar operaciones Wi-Fi) o se ha perdido la conexión con el solicitante. Un extra proporciona el estado de conexión como un booleano, donde significa verdadero CONECTADO.

Ver también

EXTRA_SUPPLICANT_CONNECTED

Valor constante: "android.net.wifi.supplicant.CONNECTION_CHANGE"

En la API de android dice que no es una buena idea comprobar STATE_CHANGE para conectividad de red y en su lugar debe utilizar SUPPLICANT_CONNECTION_CHANGE_ACTION. Esto notará un establecimiento a una red wifi, y la desconexión de una red wifi. No sé si esto podría ayudarte, pero espero que sí. ENLAZAR

Tuve una necesidad similar en mi proyecto y terminé teniendo que usar ambos.

La acción android.net.wifi.supplicant.CONNECTION_CHANGE envía una difusión cuando la red está conectada, pero normalmente antes de que el dispositivo tenga una dirección IP, necesité la acción android.net.wifi.STATE_CHANGE para ello.

La acción android.net.wifi.STATE_CHANGE recibe una transmisión en desconexión sólo si el dispositivo se está desconectando de una red, pero el wifi todavía está habilitado (cuando el hotspot se encuentra fuera del rango, por ejemplo)

Por lo tanto, debe poner ambas acciones para el receptor en el manifiesto:

 <receiver android:name="net.moronigranja.tproxy.WifiReceiver"> <intent-filter> <action android:name="android.net.wifi.STATE_CHANGE"/> <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> </intent-filter> </receiver> 

Y se pone un si para comprobar qué acción se está llamando en la intención. Aquí está el método onReceive del BroadcastReceiver en mi código:

 public void onReceive(Context c, Intent intent) { if(intent.getAction().equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)){ boolean connected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false); if(!connected) { //Start service for disconnected state here } } else if(intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){ NetworkInfo netInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); if( netInfo.isConnected() ) { //Start service for connected state here. } } } 
  • Cómo crear WPA personalizado Hotspot con ssid y contraseña en android?
  • Obtener el protocolo Wi-Fi (802.11a / b / g / n) mediante programación
  • ¿Cómo me conecto a una red Wi-Fi específica en Android mediante programación?
  • Android: eliminar la red con ciertos SSID
  • ¿Qué es diferente de NSD y WifiP2pManager?
  • ¿Cómo ser notificado cuando un compañero ya no está disponible en la gama Wi-Fi Direct?
  • Cómo conectarse a un elemento Wifi ScanResult
  • Android - Get Notified cuando se detecta un nuevo punto de acceso?
  • SecurityException lanzada al llamar a WifiManager startScan
  • Android Personalizar la exploración Wifi
  • ¿Cómo puedo configurar ProxySettings y ProxyProperties en la conexión Wi-Fi de Android usando Java?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.