Files
SNFLauncherMain_RockChip/mylibrary/src/main/java/com/android/device/NetStateChangeReceiver.java
2025-11-06 10:55:48 +08:00

99 lines
3.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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);
}
}
}
}