package com.dayu.pipirrapp.utils;
|
|
import android.content.Context;
|
import android.net.ConnectivityManager;
|
import android.net.NetworkCapabilities;
|
import android.net.NetworkInfo;
|
import android.net.NetworkRequest;
|
import android.os.Build;
|
|
/**
|
* NetUtils - 网络相关公共方法
|
*
|
* @author zuoxiao
|
* @version 1.0
|
* @since 2024-12-04
|
*/
|
public class NetUtils {
|
public static final String TAG = "NetUtils";
|
|
/**
|
* 判断当前是否有网络
|
*
|
* @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, ConnectivityManager.NetworkCallback networkCallback) {
|
// 注册网络状态监听
|
|
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
// 构建一个 NetworkRequest,指定感兴趣的网络类型
|
NetworkRequest networkRequest = new NetworkRequest.Builder()
|
|
.build();
|
|
// 网络回调
|
|
|
// 注册网络监听
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
cm.registerNetworkCallback(networkRequest, networkCallback);
|
} else {
|
// 对于较老版本,可以使用旧的方法注册网络状态监听
|
// ConnectivityManager.setNetworkCallback() 无法在 API 级别 24 以下使用
|
}
|
}
|
|
// 注销广播接收器
|
public static void unregisterReceiver(Context context,ConnectivityManager.NetworkCallback networkCallback) {
|
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
cm.unregisterNetworkCallback(networkCallback);
|
}
|
|
}
|