Sto tentando di utilizzare un BroadcastReceiver per rilevare quando il telefono si è disconnesso da un punto di accesso WiFi. Per fare questo, ho registrato il mio BroadcastReceiver nel manifesto:rilevamento disconnessione da un punto di accesso WiFi
<receiver android:name="com.eshayne.android.WiFiBroadcastReceiver">
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>
Nella mia classe WiFiBroadcastReceiver, sto controllando per un'azione NETWORK_STATE_CHANGED_ACTION e guardando lo stato dettagliato della 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) {
...
}
Il problema che ho' vedendo che quando il telefono lascia il range del punto di accesso WiFi, il mio callback "disconnesso" viene chiamato 6 volte - piuttosto regolarmente a circa una volta ogni 15 secondi - prima che si fermi. Finora non sono stato in grado di trovare alcuna caratteristica distintiva tra NetworkInfo di ogni callback. Ogni oggetto NetworkInfo essere scritto nel registro è simile al seguente:
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
Non è anche una questione di telefono vagare dentro e fuori dal campo di Wi-Fi, come la mia callback "connesso" non è chiamato tra callback "estratto" . Né vi sono altri stati che vengono attivati nel mezzo. Basta una rapida serie di 6 callback ciascuno con uno stato dettagliato di DISCONNECTED.
C'è un modo migliore per rilevare quando il telefono ha perso la sua connessione WiFi, in modo che il mio callback venga chiamato una sola volta per disconnessione? O un modo per scoprire quale dei 6 callback che sto vedendo è quella "finale"?
Qual è esattamente il problema qui? Quando dici che il telefono non si ricollega dopo la prima trasmissione, nessuno dei 6 è buono come l'altro? –
Il problema è che non voglio che il mio ricevitore di trasmissione esegua la stessa logica di gestione della disconnessione sei volte. – eshayne