2013-02-11 7 views
6

Я регистрации приемника на onResume():WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION никогда не уволили

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

Это сам приемник:

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

В моем приложении я могу подключиться к выбранной беспроводной сети, но этот SUPPLICANT_CONNECTION_CHANGE_ACTION никогда не запускается. Если я его сменил на SUPPLICANT_STATE_CHANGED_ACTION, то он работает.

Я работаю над ICS.
Неужели кто-то еще сталкивался с подобными проблемами?

+1

Почему вы не используете 'NETWORK_STATE_CHANGED_ACTION'? –

+0

да, используйте 'NETWORK_STATE_CHANGED_ACTION' с предполагаемыми эффектами: http://stackoverflow.com/a/6741489/1977815 –

ответ

4

я вещь, что следующий код поможет вам:

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

Это простой способ получить информацию, которую вы хотите, и затем выполнить какое-либо действие. Надеюсь, это может вам помочь!

0

Неужели кто-то еще сталкивался с подобными проблемами с этим намерением?

Да, меня. Кажется, что на некоторых устройствах намерение никогда не объявляется операционной системой. (Да, я сделал заводское восстановление устройства.) Я закончил, чтобы дополнительно добавить контрольный счетчик, чтобы проверить WifiManager.isWifiEnabled(), чтобы узнать об изменениях. Конечно, это всегда будет немного задержано.

Не забудьте удалить обратный вызов к одному экземпляру из Runnable от Handler в вашем BroadcastReceiver снова, если вы сделаете это, чтобы не обрабатывая событие дважды, если ваш код выполняется на устройстве, которое делает объявите намерение.

Смежные вопросы