管灌系统巡查员智能手机App
zuoxiao
2025-01-08 94c235c116ebca594662417b5fb2c7378f326c6b
app/src/main/java/com/dayu/pipirrapp/utils/NetUtils.java
@@ -2,10 +2,15 @@
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
import android.os.Build;
import androidx.annotation.NonNull;
import com.jeremyliao.liveeventbus.LiveEventBus;
/**
 * NetUtils - 网络相关公共方法
@@ -16,6 +21,10 @@
 */
public class NetUtils {
    public static final String TAG = "NetUtils";
    //有网
    public static final int Available = 1;
    //无网
    public static final int Lost = 2;
    /**
     * 判断当前是否有网络
@@ -49,32 +58,52 @@
    }
    public static void registerNetCallBack(Context context, ConnectivityManager.NetworkCallback networkCallback) {
    public static void registerNetCallBack(Context context) {
        MyLog.d("registerNetCallBack");
        // 注册网络状态监听
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        // 构建一个 NetworkRequest,指定感兴趣的网络类型
        NetworkRequest networkRequest = new NetworkRequest.Builder()
                .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) // 监听 Wi-Fi 网络
                .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)//// 监听移动数据网络
                .build();
        // 网络回调
        // 注册网络监听
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            cm.registerNetworkCallback(networkRequest, networkCallback);
        } else {
            // 对于较老版本,可以使用旧的方法注册网络状态监听
            // ConnectivityManager.setNetworkCallback() 无法在 API 级别 24 以下使用
        }
        cm.registerNetworkCallback(networkRequest, networkCallback);
    }
    // 注销广播接收器
    public static void unregisterReceiver(Context context,ConnectivityManager.NetworkCallback networkCallback) {
    public static void unregisterReceiver(Context context) {
        MyLog.d("unregisterReceiver");
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        cm.unregisterNetworkCallback(networkCallback);
    }
    //网络监控
    static ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(@NonNull Network network) {
            super.onAvailable(network);
            // 这里可以执行网络可用后的逻辑,比如进行数据请求等
            MyLog.d("networkCallback》onAvailable");
            LiveEventBus.get(CommonKeyName.NetworkCallback).post(Available);
        }
        @Override
        public void onLost(@NonNull Network network) {
            super.onLost(network);
            // 这里可以执行网络丢失后的逻辑,比如停止数据请求等
            MyLog.d("networkCallback》onLost");
            LiveEventBus.get(CommonKeyName.NetworkCallback).post(Lost);
        }
        @Override
        public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
            super.onCapabilitiesChanged(network, networkCapabilities);
            MyLog.d("networkCallback》onCapabilitiesChanged");
        }
    };
}