package cm.android.net;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.net.wifi.WifiManager;
import android.os.Parcelable;
@Deprecated
public class WifiStateChanged {
private static final Logger logger = LoggerFactory.getLogger(WifiStateChanged.class);
private Context mContext;
private NetworkConnectChangedReceiver wifiReceiver = new NetworkConnectChangedReceiver();
private IWifiStateListener wifiListener;
public WifiStateChanged(IWifiStateListener wifiListener) {
this.wifiListener = wifiListener;
}
public void register(Context context) {
this.mContext = context;
// WIFI状态接收器
IntentFilter filter = new IntentFilter();
// filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
// filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
mContext.registerReceiver(wifiReceiver, filter);
}
public void unRegister() {
mContext.unregisterReceiver(wifiReceiver);
}
private void handleWifiStateChanged(int state, Context context, Intent intent) {
switch (state) {
case WifiManager.WIFI_STATE_ENABLING:
break;
case WifiManager.WIFI_STATE_ENABLED:
wifiListener.onConnected(context, intent);
break;
case WifiManager.WIFI_STATE_DISABLING:
break;
case WifiManager.WIFI_STATE_DISABLED:
wifiListener.onDisConnected(context, intent);
break;
default:
break;
}
}
public interface IWifiStateListener {
void onConnected(Context context, Intent intent);
void onDisConnected(Context context, Intent intent);
}
private class NetworkConnectChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
logger.info("intent.getAction() = " + action);
if (WifiManager.NETWORK_STATE_CHANGED_ACTION
.equals(action)) {// 监听wifi的连接状态即是否连上了一个有效无线路由
Parcelable parcelableExtra = intent
.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (null != parcelableExtra) {
NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;
State state = networkInfo.getState();
if (state == State.CONNECTED) {
wifiListener.onConnected(context, intent);
} else if (state == State.DISCONNECTED) {
wifiListener.onDisConnected(context, intent);
}
} else if (ConnectivityManager.CONNECTIVITY_ACTION
.equals(action)) {// 监听网络连接的设置,包括wifi和移动数据 的打开和关闭
NetworkInfo info = intent
.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (info != null) {
logger.error("info.getType() = " + info.getType());
if (NetworkInfo.State.CONNECTED == info.getState()) {
logger.error("info.getState() = CONNECTED");
} else if (info.getType() == ConnectivityManager.TYPE_WIFI) {
if (NetworkInfo.State.DISCONNECTED == info.getState()
|| NetworkInfo.State.DISCONNECTING == info
.getState()) {
// showWifiDisconnected(context);
logger.error(
"info.getState() = " + info.getState());
}
}
}
} else if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {//监听wifi开关状态
//wifi开关
int wifistate = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
WifiManager.WIFI_STATE_UNKNOWN);
handleWifiStateChanged(wifistate, context, intent);
}
}
}
}
}