WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION никогда не запускается

Я регистрирую приемник на onResume():

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

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

Я работаю над ICS.
Были ли у кого-то еще подобные проблемы с этим намерением?


person EvZ    schedule 11.02.2013    source источник
comment
Почему бы вам не использовать NETWORK_STATE_CHANGED_ACTION ?   -  person Mr_and_Mrs_D    schedule 14.11.2013
comment
да, используйте NETWORK_STATE_CHANGED_ACTION с предполагаемыми эффектами: stackoverflow.com/a/6741489/1977815   -  person Vlad Stirbu    schedule 04.04.2017


Ответы (2)


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

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

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

person Flavio Valentim    schedule 15.09.2013

Кто-то еще сталкивался с такими проблемами с этим намерением?

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

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

person Matthias Ronge    schedule 30.08.2016