123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package com.edufound.reader.receiver;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.net.ConnectivityManager;
- import com.edufound.reader.util.NetworkUtil;
- import java.util.ArrayList;
- import java.util.List;
- public class NetworkChangeReceiver extends BroadcastReceiver {
- private List<NetStateChangeObserver> mObservers = new ArrayList<>();
- private int mType = -1;
- private static boolean isRegister = false;
- private static class InstanceHolder {
- private static final NetworkChangeReceiver INSTANCE = new NetworkChangeReceiver();
- }
- @Override
- public void onReceive(Context context, Intent intent) {
- if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
- int connectivityStatus = NetworkUtil.getConnectivityStatus(context);
- notifyObservers(connectivityStatus);
- }
- }
- public static void registerReceiver(Context context) {
- IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
- context.registerReceiver(InstanceHolder.INSTANCE, intentFilter);
- isRegister = true;
- }
- public static void unRegisterReceiver(Context context) {
- if (isRegister) {
- 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(int networkType) {
- if (mType == networkType) {
- return;
- }
- mType = networkType;
- if (networkType == NetworkUtil.TYPE_MOBILE) {
- for (NetStateChangeObserver observer : mObservers) {
- observer.onMobileConnect();
- }
- } else if (networkType == NetworkUtil.TYPE_WIFI) {
- for (NetStateChangeObserver observer : mObservers) {
- observer.onWifiConnect();
- }
- } else {
- for (NetStateChangeObserver observer : mObservers) {
- observer.onDisconnect();
- }
- }
- ;
- }
- public interface NetStateChangeObserver {
- void onDisconnect();
- void onMobileConnect();
- void onWifiConnect();
- }
- }
|