2013-02-11 20 views
6

jestem rejestracji odbiornika na onResume():WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION nigdy nie jest zwolniony

registerReceiver(wifiConnectivityReceiver, new 
       IntentFilter(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)); 

Jest to odbiornik sam:

class WiFiConnectivityReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED,false)){ 
      Log.d(TAG,"Connected to network!"); 
     } else { 
      Log.d(TAG,"Could not connect to network!"); 
     } 
    } 
} 

W mojej aplikacji jestem w stanie połączyć się z wybraną siecią Wi-Fi, ale ten SUPPLICANT_CONNECTION_CHANGE_ACTION nigdy nie jest uruchamiany. Jeśli go zmienię na SUPPLICANT_STATE_CHANGED_ACTION, na przykład działa.

Pracuję nad ICS.
Czy ktoś z takimi problemami miał takie problemy?

+1

Dlaczego nie używasz "NETWORK_STATE_CHANGED_ACTION"? –

+0

tak, użyj 'NETWORK_STATE_CHANGED_ACTION' z zamierzonymi efektami: http://stackoverflow.com/a/6741489/1977815 –

Odpowiedz

4

I rzeczą, że następujący kod pomoże Ci:

public void installMyReceiver(){ 
    if (I) Log.i(TAG, "installMyReceiver() - Online"); 
    mFlag = true; 


    myReceiver = new BroadcastReceiver(){ 
     public void onReceive (Context context, Intent intent){ 
      String action = intent.getAction(); 

      if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)){ 

       SupplicantState supplicantState = (SupplicantState)intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE); 
       if (supplicantState == (SupplicantState.COMPLETED)){ 
        if (I) Log.i(TAG, "SUPPLICANTSTATE ---> Connected"); 
         //do something 
       } 

       if (supplicantState == (SupplicantState.DISCONNECTED)){ 
        if (I) Log.i(TAG, "SUPPLICANTSTATE ---> Disconnected"); 
         //do something 
       } 

      } 
     } 
    }; 

    IntentFilter mFilter = new IntentFilter (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); 
    this.registerReceiver (myReceiver, mFilter); 
} 

Jest to prosty sposób, aby uzyskać informacje, które chcesz, a następnie wykonać pewne działania. Mam nadzieję, że ci to pomoże!

0

Czy ktoś z takimi problemami miał takie problemy?

Tak, ja. Wydaje się, że na niektórych urządzeniach intencje nigdy nie są deklarowane przez system operacyjny. (Tak, przywróciłem ustawienia fabryczne urządzenia.) Skończyłem, aby dodatkowo dodać licznik watchdog, aby sprawdzić WifiManager.isWifiEnabled(), aby dowiedzieć się o zmianach. Oczywiście zawsze będzie to trochę opóźnione.

Nie zapomnij usunąć zwrotnego do tej samej instancji z Runnable z Handler w BroadcastReceiver ponownie, jeśli to zrobisz, nie dla obsługi zdarzenia dwa razy, czy kod wykonywany na urządzeniu, które dokłada zadeklaruj zamiar.

Powiązane problemy