Here's the scenario, I have a LoginActivity
that makes use of the WifiManager
to obtain the IP address like this:
WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String ipAddress = wifiManager.getConnectionInfo().getIpAddress();
I do not register any receiver to receive any WiFi updates. I use the WifiManager
to obtain the IP Address only and nothing else.
Now when I complete login, I call finish()
in LoginActivity
and start SplashActivity
and that's when I see the following log in console:
LoginActivity has leaked IntentReceiver android.net.wifi.WifiManager that was originally registered here. Are you missing a call to unregisterReceiver()?
And I get this log only on marshmallow. This does not happen on <6.0 devices ever. Also on marshmallow, the app never crashes but I see this log every time.
If anyone can explain this behaviour?
I had the same error, but only when running in debug for some reason.
Adding: getApplicationContext()
fixed the issue for me. (Although I'm not entirely sure why?)
WifiManager wifi_manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
After doing a bit more research it looks like when you transition from one activity to the other the context no longer exists.
getApplicationContext() - Returns the context for all activities running in application.
getContext() - Returns the context view only current running activity.
So it's probably best use getApplicationContext() for anything that should survive for the lifetime of your app.