package cm.android.net; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import cm.android.sdk.content.BaseBroadcastReceiver; public class NetworkStateChanged { private static final Logger logger = LoggerFactory.getLogger(NetworkStateReceiver.class); private static final NetworkChangeObserver defNetworkChangeObserver = new NetworkChangeObserver(); private NetworkStateReceiver receiver = new NetworkStateReceiver(); private NetworkChangeObserver observer = defNetworkChangeObserver; private Context context; public void init(Context context, NetworkChangeObserver observer) { this.context = context; receiver.register(this.context); registerObserver(observer); } public void deInit() { receiver.unregister(context); synchronized (this) { observer = defNetworkChangeObserver; } context = null; } /** * 注册网络连接观察者 */ private synchronized void registerObserver(NetworkChangeObserver observer) { if (null == observer) { return; } this.observer = observer; } private synchronized void notifyObserver(boolean isNetworkAvailable, NetworkUtil.NetType netType) { if (isNetworkAvailable) { observer.onConnect(netType); } else { observer.onDisConnect(); } } public class NetworkStateReceiver extends BaseBroadcastReceiver { private final static String ANDROID_NET_CHANGE_ACTION = ConnectivityManager.CONNECTIVITY_ACTION; @Override public IntentFilter createIntentFilter() { IntentFilter filter = new IntentFilter(); filter.addAction(ANDROID_NET_CHANGE_ACTION); return filter; } @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equalsIgnoreCase(ANDROID_NET_CHANGE_ACTION)) { logger.info("network changed."); boolean networkAvailable = NetworkUtil.isConnected(context); if (!networkAvailable) { logger.info("network unavailable."); } else { logger.info("network available."); } NetworkUtil.NetType netType = NetworkUtil.getAPNType(context); notifyObserver(networkAvailable, netType); } } } public static class NetworkChangeObserver { /** * 网络连接连接时调用 */ public void onConnect(NetworkUtil.NetType type) { } /** * 当前没有网络连接 */ public void onDisConnect() { } } }