当Wifi连接重新启动时,仅具有动作NETWORK_STATE_CHANGED_ACTION
(其常量值为android.net.wifi.STATE_CHANGE
)的广播意图是否正常?即当Wifi断开连接时,我没有得到这个意图。
更新:我最感兴趣的是> = 2.2 Froyo
答案 0 :(得分:24)
public static final String SUPPLICANT_CONNECTION_CHANGE_ACTION
自:API Level 1
广播意图 表示连接的动作 请求者已经建立 (现在可以执行了 Wi-Fi操作)或连接到 请求者已经丢失。一 extra提供连接状态 一个布尔值,其中true表示已连接。
另见
EXTRA_SUPPLICANT_CONNECTED
常量值:“android.net.wifi.supplicant.CONNECTION_CHANGE”
在android的API中,它表示检查STATE_CHANGE以获取网络连接并不是一个好主意,而是应该使用SUPPLICANT_CONNECTION_CHANGE_ACTION。这将注意到wifi网络的建立,以及wifi网络的断开连接。我不知道这对你有帮助,但我确实希望如此。 LINK
答案 1 :(得分:21)
我的项目中有类似的需求,最终不得不同时使用它们。
android.net.wifi.supplicant.CONNECTION_CHANGE动作在网络连接时发送广播,但通常在设备有IP地址之前,所以我需要android.net.wifi.STATE_CHANGE动作。
android.net.wifi.STATE_CHANGE操作仅在设备与网络断开连接时才会收到断开连接的广播,但仍然启用了wifi(例如,当热点超出范围时)
所以你应该在清单中为接收者放置两个动作:
<receiver android:name="net.moronigranja.tproxy.WifiReceiver">
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE"/>
<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
</intent-filter>
</receiver>
然后你输入一个if来检查意图中正在调用哪个动作。这是我的代码中的BroadcastReceiver的onReceive方法:
public void onReceive(Context c, Intent intent) {
if(intent.getAction().equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)){
boolean connected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
if(!connected) {
//Start service for disconnected state here
}
}
else if(intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){
NetworkInfo netInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if( netInfo.isConnected() )
{
//Start service for connected state here.
}
}
}