当网络设置发生变化时,需侦听相应的广播并做处理,代码如下:
public class NetworkUtil {
public static final int NETWORK_TYPE_NONE = 0;
public static final int NETWORK_TYPE_NULL = 1;
public static final int NETWORK_TYPE_ETHERNET_ONLINE = 2;
public static final int NETWORK_TYPE_ETHERNET_OFFLINE = 3;
public static final int NETWORK_TYPE_MOBILE_ONLINE = 4;
public static final int NETWORK_TYPE_MOBILE_OFFLINE = 5;
pubic void register() {
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "[network onReceive] action is " + intent.getAction());
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
networkChange(context);
}
}
}, filter);
}
/**
* 检测网络状态
* @param context context
* @return 0.无网络 1.断开网络 2.以太网络在线 3.以太网络离线 4.4G网络在线 5.4G网络离线
*/
public int networkChange(Context context) {
int netstate = NETWORK_TYPE_NONE;
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
if (activeNetwork != null) {
LogUtils.d(TAG + " network type is " + activeNetwork.getType() + ", connect is " + activeNetwork.isConnected());
LogUtils.d(TAG + " available is " + activeNetwork.isAvailable());
LogUtils.d(TAG + " state is " + activeNetwork.getState() + " ? " + NetworkInfo.State.CONNECTED);
LogUtils.d(TAG + " isFailover is " + activeNetwork.isFailover());
switch (activeNetwork.getType()) {
case ConnectivityManager.TYPE_WIFI:
case ConnectivityManager.TYPE_ETHERNET:
if (activeNetwork.isConnected() && activeNetwork.isAvailable()) {
netstate = NETWORK_TYPE_ETHERNET_ONLINE;
} else {
netstate = NETWORK_TYPE_ETHERNET_OFFLINE;
}
break;
case ConnectivityManager.TYPE_MOBILE:
if (activeNetwork.isConnected() && activeNetwork.isAvailable()) {
netstate = NETWORK_TYPE_MOBILE_ONLINE;
} else {
netstate = NETWORK_TYPE_MOBILE_OFFLINE;
}
break;
}
} else {
LogUtils.d(TAG + " activeNetwork is null.");
netstate = NETWORK_TYPE_NULL;
}
LogUtils.d(TAG + "[networkChange] netstate is %d", netstate);
setNetworkState(context, netstate);
return netstate;
}
}