2013-02-11 24 views
6

ateş asla seçtiğim WiFi ağına bağlantı kurabiliyorum Benim uygulamadaWifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION ben <code>onResume()</code> alıcıyı kayıt am

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!"); 
     } 
    } 
} 

ama Bu SUPPLICANT_CONNECTION_CHANGE_ACTION asla ateşlenmez. Örneğin, SUPPLICANT_STATE_CHANGED_ACTION olarak değiştirirsem çalışır.

Ben ICS üzerinde çalışıyorum.
Başka biri bu amaçla bu gibi sorunlarla karşılaştı mı? Aşağıdaki kod size yardımcı olacaktır

+1

Neden 'NETWORK_STATE_CHANGED_ACTION' kullanmıyorsun? –

+0

evet 'NETWORK_STATE_CHANGED_ACTION'with etkilerini amaçlanan kullanın: http://stackoverflow.com/a/6741489/1977815 –

cevap

4

Ben şey:

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); 
} 

Bazı eylem istediğiniz bilgileri elde etme ve daha sonra yürütmek için basit bir yol. Umarım size yardımcı olabilir!

0

bu niyetle böyle bir başkasının deneyim sorunları mü?

Evet, ben. Bazı cihazlarda niyetin işletim sistemi tarafından hiçbir zaman beyan edilmediği görülmektedir. (Evet, cihazı fabrika ayarlarına sıfırladım.) Ayrıca değişikliklerin farkına varmak için WifiManager.isWifiEnabled()'u kontrol etmek üzere bir watchdog sayacı ekledim. Tabii ki, bu her zaman biraz gecikmeli olacaktır.

iki kez olay işleme için değil, bunu yaparsanız kodunuzu yapan bir cihazı üzerinde çalışır eğer tekrar BroadcastReceiver yılında Handler den Runnable aynı örneğe için geri arama kaldırmak unutmayın niyetini beyan et.