package com.android.nebulasdk; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; 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<>(); @Override public void onReceive(Context context, Intent intent) { if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) { NetworkType networkType = NetworkUtil.getNetworkType(context); 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) { try { context.unregisterReceiver(InstanceHolder.INSTANCE); }catch (Exception e){ e.printStackTrace(); } } 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); } } } }