99 lines
3.4 KiB
Java
99 lines
3.4 KiB
Java
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<NetStateChangeObserver> 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);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|