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)
[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.