package com.dayu.pipirrapp.utils;
|
|
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 - 网络相关公共方法
|
*
|
* @author zuoxiao
|
* @version 1.0
|
* @since 2024-12-04
|
*/
|
public class NetUtils {
|
public static final String TAG = "NetUtils";
|
//有网
|
public static final int Available = 1;
|
//无网
|
public static final int Lost = 2;
|
|
/**
|
* 判断当前是否有网络
|
*
|
* @param context
|
* @return
|
*/
|
public static boolean isNetworkAvailable(Context context) {
|
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
if (connectivityManager != null) {
|
// 对于 Android 版本大于等于 Android Q (API level 29)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
|
if (capabilities != null) {
|
// 检查网络是否有传输能力(包括 Wi-Fi 和移动数据)
|
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
|
return true;
|
}
|
}
|
} else {
|
// 对于 Android Q 以下版本
|
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
|
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
|
return true;
|
}
|
}
|
}
|
|
return false; // 无网络连接
|
}
|
|
|
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();
|
// 注册网络监听
|
|
cm.registerNetworkCallback(networkRequest, 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");
|
}
|
};
|
}
|