我针对三个action做了测试:
android.net.wifi.WIFI_STATE_CHANGED
android.net.wifi.STATE_CHANGED
android.net.wifi.supplicant.CONNECTION_CHANGE
其中前2个很诡异,有时候甚至收不到,即使app仍在前台。有时候甚至一次收到好几个:
10-28 01:07:50.379: I/StartupReceiver(28646): Received broadcast intent: android.net.wifi.STATE_CHANGE
10-28 01:07:50.969: I/StartupReceiver(28646): Received broadcast intent: android.net.wifi.STATE_CHANGE
10-28 01:07:51.044: I/StartupReceiver(28646): Received broadcast intent: android.net.wifi.STATE_CHANGE
只有第3个很正常,手机上的wifi图标亮、灭的同时,就可以在logcat中看到我在onReceive中打印的消息,杀掉后仍可以收到。
In android's API it says that it's not a good idea to check STATE_CHANGE for network connectivity and instead you should use SUPPLICANT_CONNECTION_CHANGE_ACTION. this will notice an establishment to a wifi network, and the disconnection of a wifi network.
这个回答建议用SUPPLICANT_CONNECTION_CHANGE_ACTION代替STATE_CHANGE,来检查wifi的连接状态。不过这个回答也没有给出收不到broadcast的解释。