# NetworkStateManager **Repository Path**: dench/network-state-manager ## Basic Information - **Project Name**: NetworkStateManager - **Description**: Android 13 监控网络连接状态 - **Primary Language**: Kotlin - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-01-31 - **Last Updated**: 2024-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Android 13 监控网络连接状态 ### 获取瞬时状态 ```kotlin val cm = context.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val currentNetwork = cm.activeNetwork if (currentNetwork != null) { val caps = cm.getNetworkCapabilities(currentNetwork) val linkProperties = cm.getLinkProperties(currentNetwork) } ``` ### 监听网络事件 将 `NetworkCallback` 类与 `ConnectivityManager.registerDefaultNetworkCallback(NetworkCallback)` 及 `ConnectivityManager.registerNetworkCallback(NetworkCallback)` 结合使用。 ```kotlin val cm = context.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager cm.registerDefaultNetworkCallback(object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { Log.e(TAG, "The default network is now: " + network) } override fun onLost(network: Network) { Log.e(TAG, "The application no longer has a default network. The last default network was " + network) handle(null) } override fun onCapabilitiesChanged( network: Network, networkCapabilities: NetworkCapabilities ) { Log.d(TAG, "The default network changed capabilities: " + networkCapabilities) handle(networkCapabilities) } override fun onLinkPropertiesChanged(network: Network, linkProperties: LinkProperties) { Log.i(TAG, "The default network changed link properties: " + linkProperties) } }) ``` ### 解析NetworkCapabilities的网络状态信息 ```kotlin private fun handle(caps: NetworkCapabilities?) { if (caps != null) { if (caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) { if ( caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI_AWARE) ) { setResult(STATE_WIFI) return } else if ( caps.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || caps.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) ) { setResult(STATE_MOBILE) return } } } setResult(STATE_UNKNOWN) return } ```