记录一下:
借鉴Android 中监听WIFI连接状态变化
/**
* Cre
* wifi状态监听器 wifi开启状态与连接状态
*/
public class WifiStateListener {
private Context mContext;
private WifiReceiver receiver;
private WifiConnectState mInterface;
public WifiStateListener(Context context, WifiConnectState mInterface) {
this.mContext = context;
this.mInterface = mInterface;
receiver = new WifiReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
mContext.registerReceiver(receiver, filter);
}
/**
* 释放资源
*/
public void onDestroy() {
if (receiver != null) {
mContext.unregisterReceiver(receiver);
}
}
class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
//wifi开关 的状态监听
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {//这个监听wifi的打开与关闭,与wifi的连接无关
int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
switch (wifiState) {
case WifiManager.WIFI_STATE_DISABLED://已关闭
break;
case WifiManager.WIFI_STATE_DISABLING://正在关闭
break;
case WifiManager.WIFI_STATE_ENABLED://已开启
break;
case WifiManager.WIFI_STATE_ENABLING://正在开启
break;
case WifiManager.WIFI_STATE_UNKNOWN://未知
break;
}
}
// 这个监听wifi的连接状态即是否连上了一个有效无线路由,当上边广播的状态是WifiManager.WIFI_STATE_DISABLING,和WIFI_STATE_DISABLED的时候,根本不会接到这个广播。
// 在上边广播接到广播是WifiManager.WIFI_STATE_ENABLED状态的同时也会接到这个广播,当然刚打开wifi肯定还没有连接到有效的无线
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (null != parcelableExtra) {
NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;
NetworkInfo.State state = networkInfo.getState();
if (state == NetworkInfo.State.DISCONNECTED) {//wifi连接断开
mInterface.wifiConnectState();
} else if (state == NetworkInfo.State.CONNECTED) {//wifi连接成功(更换wifi成功也会调用)
mInterface.wifiConnectState();
}
}
}
}
}
public interface WifiConnectState {
void wifiConnectState();
}
}