I have a snippet of code that I'm calling from a service:
context.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
WifiManager mWm = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
ret = mWm.isWifiEnabled();
// DO MORE STUFF HERE
} catch (Exception e) {
}
}
}, new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
What I would like is a way to check and make sure that the registerReceiver
isn't already listening before it calls it again. Is this possible?
For example if my snippet of code is in a method, and I call the method 10 times, right now the onReceive
method appears to run 10 times.
A simple solution to this problem is to call the registerReceiver() in your Custom Application Class. This will ensure that your Broadcast receiver will be called only one in your entire Application lifecycle.
You should register and unregister your broadcast in onResume() and onPause() methods. if you register in onStart() and unregister it in onStop().
There are two ways to make a broadcast receiver known to the system: One is declare it in the manifest file with this element. The other is to create the receiver dynamically in code and register it with the Context. registerReceiver() method.
There isn't a way of finding out — you should only be calling registerReceiver
once, most likely upon the creation of your service.
You need to keep a reference to the BroadcastReceiver
too for when you call unregisterService
(onDestroy()
is the natural place for it), otherwise the system will warn you about leaking broadcast receivers and get angry and possibly shout at you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With