当 Wifi 连接恢复时,只有带有动作的广播意图NETWORK_STATE_CHANGED_ACTION
(其常数值为 )是否正常?android.net.wifi.STATE_CHANGE
即当 Wifi 被断开时我没有得到这个意图。
更新:我最感兴趣的是 >= 2.2 Froyo
当 Wifi 连接恢复时,只有带有动作的广播意图NETWORK_STATE_CHANGED_ACTION
(其常数值为 )是否正常?android.net.wifi.STATE_CHANGE
即当 Wifi 被断开时我没有得到这个意图。
更新:我最感兴趣的是 >= 2.2 Froyo
公共静态最终字符串 SUPPLICANT_CONNECTION_CHANGE_ACTION
自:API 级别 1
广播意图操作,指示与请求者的连接已建立(现在可以执行 Wi-Fi 操作)或与请求者的连接已丢失。一个额外的提供连接状态作为布尔值,其中 true 表示已连接。
也可以看看
EXTRA_SUPPLICANT_CONNECTED
常量值:“android.net.wifi.supplicant.CONNECTION_CHANGE”
在 android 的 API 中,它说检查 STATE_CHANGE 的网络连接不是一个好主意,而是应该使用 SUPPLICANT_CONNECTION_CHANGE_ACTION。这将注意到 wifi 网络的建立,以及 wifi 网络的断开。我不知道这是否对你有帮助,但我希望如此。关联
我在我的项目中有类似的需求,最终不得不同时使用两者。
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.
}
}
}