Android marshmallow WifiManager漏掉了IntentReceiver

时间:2016-04-26 06:56:53

标签: android android-6.0-marshmallow wifimanager android-6.0.1-marshmallow

在这种情况下,我有LoginActivity使用WifiManager来获取 IP地址,如下所示:

WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String ipAddress = wifiManager.getConnectionInfo().getIpAddress();

注册任何接收器以接收任何WiFi更新。我使用WifiManager来获取IP地址,而不是其他任何内容

现在,当我完成登录时,我会在finish()中致电LoginActivity并在我在控制台中看到以下日志时启动SplashActivity及其他人:

  

LoginActivity泄露了IntentReceiver android.net.wifi.WifiManager   最初在这里注册。你错过了一个电话吗?   unregisterReceiver()?

我只在 marshmallow上记录。这不会发生在< 6.0设备上。同样在棉花糖上,应用程序永远不会崩溃,但我每次都会看到这个日志。

如果有人能解释这种行为吗?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的错误,但只是因为某种原因在调试中运行。

添加:getApplicationContext()为我解决了这个问题。 (虽然我不完全确定为什么?)

WifiManager wifi_manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

在做了一些研究后,看起来当你从一个活动转移到另一个活动时,上下文不再存在。

  

getApplicationContext() - 返回在应用程序中运行的所有活动的上下文。

     

getContext() - 仅返回当前运行活动的上下文视图。

因此,最好使用getApplicationContext()来处理应用程序生命周期内存在的任何事情。