2

Ich habe eine Anwendung mit Wifi Broadcast-Empfänger entwickelt. Meine Anforderung ist Funktionsaufruf zu erhalten, wenn Wifi mit einem Router verbunden ist, indem ich die IP-Adresse erhalte sowie eine andere Funktion anrufe, wenn Wifi von einem zuvor verbundenen Router getrennt wird.wifi broadcast receiver mehrere intents

ich verwendet, um dieses in Manifest

<action android:name="android.net.wifi.STATE_CHANGE" /> 

für Rundfunkempfänger registrieren.

und in Broadcast-Empfängerklasse in OnReceive:

NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
NetworkInfo.State state = networkInfo.getState(); 

if (state == NetworkInfo.State.CONNECTED) { 

    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    WifiInfo wi = wifiManager.getConnectionInfo(); 

    Log.e("++++WiFi Conected","++++WiFi Conected"); 

    Flags.wifiState = true; 
    updateWifiSyncTrue(context); 

    if (wi.getIpAddress() != 0) { 
     intent = new Intent(context, ConnectionService.class); 
     intent.putExtra("intentValue", "signalOn"); 
     intent.putExtra("bssId", wi.getBSSID()); 
     context.startService(intent); 
    } 
} 

if (state == NetworkInfo.State.DISCONNECTED) { 
    Log.e("++++WiFi DisConected","++++WiFi DisConnected"); 
    Flags.wifiState = false; 
    updateWifiSyncFalse(context); 
    updateRouterSyncFalse(context); 

    intent = new Intent(context, ConnectionService.class); 
    intent.putExtra("intentValue", "signalOff"); 
    context.startService(intent); 
} 

Jedes Ding arbeitete bis KitKat Aber wenn ich diese mit Lutscher Version testen Auf oft Receive-Aufruf für.

Wenn ich meine WiFi einschalten seine resultierende als Zustand: Idle --Connecting-- Authentifizieren - Captive Check - Connected - Verbunden. Manchmal auch getrennt.

während des Ausschaltens. Connected - Disconnected - Disconnected - Disconnected -

Das Debug Ergebnis NetworkInfo wie unten Disconnected ist:

[type: WIFI[], state: CONNECTING/CONNECTING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTING/AUTHENTICATING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTING/AUTHENTICATING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTING/CONNECTING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTING/OBTAINING_IPADDR, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTING/CAPTIVE_PORTAL_CHECK, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTING/CAPTIVE_PORTAL_CHECK, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

[type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "DJ  Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]. 

Ich bitte mich in der gleichen zu helfen. Unter Verwendung meines Codes, wenn WiFi eingeschaltet ist, wird CONNECTED Zustand mehrmals ausgeführt und DISCONNECTED Zustand auch.

Und wenn WIFI ausgeschaltet ist Connected Zustand wird generiert und dann 4-5 Disconnected State.

Ich benutzte HTC Telefon für die Prüfung.

Ich habe einfache Codierung verwendet, muss ich mehr tieferen Zustand für diese Prüfung bekommen? (Detaillierter Status usw.)

Was ist der beste Weg, um mit dieser Lösung umzugehen?

+0

Vielen Dank für die Bearbeitung und Korrekturen –

Antwort

3

Wann immer Sie den Intent-Filter android.net.wifi.STATE_CHANGE verwenden, wird der Broadcast-Empfänger mehrmals ausgelöst. Zum Beispiel, wenn Sie Wifi einschalten, wird die onreceive der Sendung mehrmals überall von 1-5 mal anrufen. Also, es wird Ihnen mehrere NetworkInfo.State.CONNECTED und das gleiche mit getrennt auch geben.

Also wenn Sie nur eine angeschlossen oder getrennt haben wollen, bedeutet es, verwenden Sie einfach eine boolesche Flagge und stellen Sie es richtig in einer Weise, dass zuerst, wenn WiFi aktiviert bedeutet, sollte es verbleibenden Wi-Fi Connected Intents und ähnlich wifi getrennt auch ignorieren.

+0

** danke ** für die Antwort sivateja.koppineedi –

Verwandte Themen