Estoy tratando de usar un BroadcastReceiver para detectar cuando el teléfono se ha desconectado de un punto de acceso WiFi. Para ello, he registrado mi BroadcastReceiver en el manifiesto:detección de desconexión de un punto de acceso WiFi
<receiver android:name="com.eshayne.android.WiFiBroadcastReceiver">
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>
En mi clase WiFiBroadcastReceiver, yo soy el registro de una acción NETWORK_STATE_CHANGED_ACTION y mirando en el estado detallado de la NetworkInfo:
if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
NetworkInfo info = (NetworkInfo)intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
android.util.Log.d("com.eshayne.android.WiFiBroadcastReceiver", "network state change - detailedState=" + info.getDetailedState() + ": " + info.toString());
if (info.getDetailedState() == DetailedState.DISCONNECTED) {
...
}
else if (info.getDetailedState() == DetailedState.CONNECTED) {
...
}
El problema I' Lo que veo es que cuando el teléfono sale del rango del punto de acceso WiFi, mi devolución de llamada "desconectada" se llama 6 veces, con bastante frecuencia aproximadamente una vez cada 15 segundos, antes de que se detenga. Hasta ahora no he podido encontrar ninguna característica distintiva entre cada NetworkInfo de devolución de llamada. Cada objeto NetworkInfo que se escriben en el registro es el siguiente:
02-18 10:16:51.918 D/com.eshayne.android.WiFiBroadcastReceiver(1511): network state change - detailedState=DISCONNECTED: NetworkInfo: type: WIFI[], state: DISCONNECTED/DISCONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
Tampoco es un problema del teléfono entraba y salía de la gama Wi-Fi, ya que mi devolución de llamada "conectado" no se llama en el medio devoluciones de llamada "desconectado" . Tampoco se activan otros estados en el medio. Solo una serie rápida de 6 devoluciones de llamada cada una con un detallado estado de DESCONECTADO.
¿Hay una manera mejor para mí para detectar cuando el teléfono ha perdido su conexión WiFi, de modo que mi devolución de llamada solo se llame una vez por desconexión? O cualquier forma de detectar cuál de las 6 devoluciones de llamada que estoy viendo es la "final"?
¿Cuál es exactamente el problema aquí? Cuando dice que el teléfono no se está reconectando después de la primera transmisión, ¿no hay ninguno de los 6 tan bueno como el otro? –
El problema es que no quiero que mi receptor de difusión realice la misma lógica de manejo de desconexión seis veces. – eshayne