| | |
| | | |
| | | 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 - 网络相关公共方法 |
| | |
| | | */ |
| | | public class NetUtils { |
| | | public static final String TAG = "NetUtils"; |
| | | //有网 |
| | | public static final int Available = 1; |
| | | //无网 |
| | | public static final int Lost = 2; |
| | | |
| | | /** |
| | | * 判断当前是否有网络 |
| | |
| | | } |
| | | |
| | | |
| | | 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"); |
| | | } |
| | | }; |
| | | } |