# NetworkHelper **Repository Path**: xjdd/NetworkHelper ## Basic Information - **Project Name**: NetworkHelper - **Description**: 全局的网络监听工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-07-29 - **Last Updated**: 2021-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ##网络监听 ###功能分析 要监听网络状态发生变化,以及对于Android不同版本的支持,站在一个lib角度来实现该功能的话,我们就需要做到以下几点: ###定义好网络的状态 根据不同版本使用不同的网络监听方法 让使用的地方尽可能的少集成即可使用该功能 网络状态定义 对于手机而言,我们关注的网络状态大体有三种:没网情况、Wi-Fi情况、移动蜂窝Network,对于状态的定义,我们要用到java的枚举类型来定义这些类型。 ###网络状态变化监听方法 BroadcastReceiver 一开始的时候,我们可能都习惯于用BroadcastReceiver来监听网络状态的变化,BroadcastReceiver的注册分为静态manifest注册和动态注册,虽然通过manifest注册比较简单,但是在Android 7.0(targetSdkVersion >= 24)以后,新版本移除了一些隐式的广播,意味着7.0及以上版本无法通过manifest注册广播来监听网络状态变化,所以通过BroadcastReceiver的方式我们只能在代码中动态注册广播了。 NetworkCallback NetworkCallback的监听有两种方法: registerDefaultNetworkCallback(NetworkCallback callback) //Android API 26时加入 registerNetworkCallback(NetworkRequest request,NetworkCallback callback) //Android API 21时加入 Android 官方建议API 28及以上通过NetworkCallback的方式来监听网络状态的变化 ##使用方式 在全局初始化 `NetworkManager.Companion.get().init(this);;` 设置页面监听 `NetworkManager.get().registerObserver(this)` 网络状态触发方法 ` override fun networkType(networkType: NetworkType) { DebugLogs.show("2" + networkType.toString()) } ` 新增对当前网络切换状态监听 ` val obj = object : CommonNetworkStateController(){ override fun lostNet() { super.lostNet() DebugLogs.show("网络丢失") } override fun wifi2mobile() { super.wifi2mobile() DebugLogs.show("WiFi切换到移动") } override fun mobile2wifi() { super.mobile2wifi() DebugLogs.show("移动切换到WiFi") } override fun netReconnecting() { super.netReconnecting() DebugLogs.show("网络重连") } override fun currentNetwork(networkType: NetworkType) { super.currentNetwork(networkType) DebugLogs.show("当前网络"+networkType) } } NetworkManager.get().registerObserver(obj) `