Search code examples
androidbroadcastreceiver

I am receiving "android.net.wifi.WIFI_STATE_CHANGED" as soon as Registering BroadcastReceiver


I register a broadcast on runtime to receive "android.net.wifi.WIFI_STATE_CHANGED"

   IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("android.net.wifi.WIFI_STATE_CHANGED");
    broadcastReceiverAction = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals("android.net.wifi.WIFI_STATE_CHANGED")) {
/*I get this action as soon as calling registerReceiver(broadcastReceiverAction, intentFilter);*/
    }
    }
    }
    registerReceiver(broadcastReceiverAction, intentFilter);

Issue: This gets the broadcast action as soon as registering the receiver. I got this on Android API 26 & Higher Which I can not declare "android.net.wifi.WIFI_STATE_CHANGED" in Manifest. (No Longer Supported by Android System)


Solution

  • [Simple Solution]

    Problem is Sticky Broadcasts which trigger at the moment of registration. To avoid this I simply add another parameter to restrict the process. I defined a static variable

    public static boolean triggerBroadcast = false;
    

    Then I change it to after registering the broadcast by few second delay.

    registerReceiver(broadcastReceiverAction, intentFilter);
    new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
    triggerWifiBroadcast = true;
    }
    }, 3000);
    

    Then onReceive() I compare intent.getAction with this

    if (intent.getAction().equals("android.net.wifi.WIFI_STATE_CHANGED") && triggerBroadcast ) {
    //
    }
    

    Then you can change it to false whenever decide to unregister the broadcast receiver.