package com.android.device; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import com.android.util.LogUtils; import com.android.util.NetUtil; import com.android.util.NetworkType; import com.android.util.NetworkUtil; import java.util.ArrayList; import java.util.List; public class NetStateChangeReceiver extends BroadcastReceiver { private static class InstanceHolder { private static final NetStateChangeReceiver INSTANCE = new NetStateChangeReceiver(); } private List mObservers = new ArrayList<>(); // private int lastEffectiveNetworkType = -1; // @Override // public void onReceive(Context context, Intent intent) { // if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) { // int currentNetState = NetUtil.getNetWorkState(context); // int currentEffectiveType = NetUtil.getEffectiveNetworkType(currentNetState); // if (currentEffectiveType == lastEffectiveNetworkType) { // LogUtils.loge("NetStateChangeReceiver:同类型网络波动,跳过通知(类型:" + // NetUtil.getTypeName(currentEffectiveType) + ")"); // return; // } // // //类型变更 通知观察者,并更新上次类型 // lastEffectiveNetworkType = currentEffectiveType; // NetworkType networkType = NetworkUtil.getNetworkType(context); // LogUtils.loge("NetStateChangeReceiver:网络类型变更(" + // NetUtil.getTypeName(lastEffectiveNetworkType) + "),通知观察者"); // notifyObservers(networkType); // } // } @Override public void onReceive(Context context, Intent intent) { if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) { NetworkType networkType = NetworkUtil.getNetworkType(context); LogUtils.loge("NetStateChangeReceiver:"+networkType.toString()); notifyObservers(networkType); } } public static void registerReceiver(Context context) { IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); context.registerReceiver(InstanceHolder.INSTANCE, intentFilter); } public static void unRegisterReceiver(Context context) { context.unregisterReceiver(InstanceHolder.INSTANCE); } public static void registerObserver(NetStateChangeObserver observer) { if (observer == null) { return; } if (!InstanceHolder.INSTANCE.mObservers.contains(observer)) { InstanceHolder.INSTANCE.mObservers.add(observer); } } public static void unRegisterObserver(NetStateChangeObserver observer) { if (observer == null) { return; } if (InstanceHolder.INSTANCE.mObservers == null) { return; } InstanceHolder.INSTANCE.mObservers.remove(observer); } private void notifyObservers(NetworkType networkType) { if (networkType == NetworkType.NETWORK_NO) { for (NetStateChangeObserver observer : mObservers) { observer.onNetDisconnected(); } } else { for (NetStateChangeObserver observer : mObservers) { observer.onNetConnected(networkType); } } } }