refactor(net): 完善网络监听
This commit is contained in:
@ -9,6 +9,7 @@ import com.quyunshuo.androidbaseframemvvm.base.utils.EventBusRegister
|
||||
import com.quyunshuo.androidbaseframemvvm.base.utils.EventBusUtils
|
||||
import com.quyunshuo.androidbaseframemvvm.base.utils.network.AutoRegisterNetListener
|
||||
import com.quyunshuo.androidbaseframemvvm.base.utils.network.NetworkStateChangeListener
|
||||
import com.quyunshuo.androidbaseframemvvm.base.utils.network.NetworkTypeEnum
|
||||
import com.quyunshuo.androidbaseframemvvm.base.utils.status.ViewStatusHelper
|
||||
import com.quyunshuo.androidbaseframemvvm.base.utils.status.imp.BaseFrameViewStatusHelperImp
|
||||
import com.quyunshuo.androidbaseframemvvm.base.utils.toast
|
||||
@ -68,7 +69,7 @@ abstract class BaseFrameActivity<VB : ViewBinding, VM : BaseViewModel> : BaseFra
|
||||
* @param type Int 网络类型
|
||||
* @return Unit
|
||||
*/
|
||||
override fun networkTypeChange(type: Int) {}
|
||||
override fun networkTypeChange(type: NetworkTypeEnum) {}
|
||||
|
||||
/**
|
||||
* 网络连接状态更改回调
|
||||
|
||||
@ -4,6 +4,7 @@ import android.net.ConnectivityManager
|
||||
import android.net.Network
|
||||
import android.net.NetworkCapabilities
|
||||
|
||||
|
||||
/**
|
||||
* 实时监听网络状态变化的[ConnectivityManager.NetworkCallback]实现类
|
||||
*
|
||||
@ -15,7 +16,7 @@ class NetworkCallbackImpl : ConnectivityManager.NetworkCallback() {
|
||||
/**
|
||||
* 当前网络类型
|
||||
*/
|
||||
var currentNetworkType = -1
|
||||
var currentNetworkType: NetworkTypeEnum = NetworkTypeEnum.OTHER
|
||||
|
||||
/**
|
||||
* 当前网络是否已连接
|
||||
@ -42,18 +43,38 @@ class NetworkCallbackImpl : ConnectivityManager.NetworkCallback() {
|
||||
override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
|
||||
super.onCapabilitiesChanged(network, networkCapabilities)
|
||||
if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
|
||||
currentNetworkType = when {
|
||||
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
|
||||
NetworkCapabilities.TRANSPORT_WIFI
|
||||
}
|
||||
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
|
||||
NetworkCapabilities.TRANSPORT_CELLULAR
|
||||
}
|
||||
else -> {
|
||||
NetworkCapabilities.TRANSPORT_WIFI
|
||||
}
|
||||
}
|
||||
currentNetworkType = networkTypeConvert(networkCapabilities)
|
||||
changeCall?.networkTypeChange(currentNetworkType)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 网络类型转换
|
||||
*/
|
||||
private fun networkTypeConvert(networkCapabilities: NetworkCapabilities): NetworkTypeEnum {
|
||||
return when {
|
||||
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
|
||||
NetworkTypeEnum.TRANSPORT_CELLULAR
|
||||
}
|
||||
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
|
||||
NetworkTypeEnum.TRANSPORT_WIFI
|
||||
}
|
||||
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH) -> {
|
||||
NetworkTypeEnum.TRANSPORT_BLUETOOTH
|
||||
}
|
||||
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> {
|
||||
NetworkTypeEnum.TRANSPORT_ETHERNET
|
||||
}
|
||||
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN) -> {
|
||||
NetworkTypeEnum.TRANSPORT_VPN
|
||||
}
|
||||
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI_AWARE) -> {
|
||||
NetworkTypeEnum.TRANSPORT_WIFI_AWARE
|
||||
}
|
||||
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_LOWPAN) -> {
|
||||
NetworkTypeEnum.TRANSPORT_LOWPAN
|
||||
}
|
||||
else -> NetworkTypeEnum.OTHER
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -10,10 +10,10 @@ interface NetworkStateChangeListener {
|
||||
|
||||
/**
|
||||
* 网络类型更改回调
|
||||
* @param type Int 网络类型
|
||||
* @param type NetworkTypeEnum 网络类型
|
||||
* @return Unit
|
||||
*/
|
||||
fun networkTypeChange(type: Int)
|
||||
fun networkTypeChange(type: NetworkTypeEnum)
|
||||
|
||||
/**
|
||||
* 网络连接状态更改回调
|
||||
|
||||
@ -47,10 +47,12 @@ object NetworkStateClient {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取网络类型 其他类型的网络归为了WIFI,如果需要细分,可以对[NetworkCallbackImpl]进行追加分类
|
||||
* @return Int WIFI:[NetworkCapabilities.TRANSPORT_WIFI]、移动网络:[NetworkCapabilities.TRANSPORT_CELLULAR]
|
||||
* 获取网络类型
|
||||
* 当前网络类型是缓存的最近一次连接的网络类型,当无网络连接时其实拿到的是上一次的
|
||||
* 所以网络是否连接应该作为第一判断,确定网络是连接状态时再获取当前的网络类型,因为网络类型中没有设定无网
|
||||
* @return NetworkTypeEnum 参照[NetworkTypeEnum]
|
||||
*/
|
||||
fun getNetworkType(): Int = mNetworkCallback.currentNetworkType
|
||||
fun getNetworkType(): NetworkTypeEnum = mNetworkCallback.currentNetworkType
|
||||
|
||||
/**
|
||||
* 网络是否连接
|
||||
|
||||
@ -0,0 +1,50 @@
|
||||
package com.quyunshuo.androidbaseframemvvm.base.utils.network
|
||||
|
||||
/**
|
||||
* 网络类型的枚举
|
||||
*
|
||||
* @author Qu Yunshuo
|
||||
* @since 2021/8/22 10:35 下午
|
||||
*/
|
||||
enum class NetworkTypeEnum {
|
||||
|
||||
/**
|
||||
* 使用蜂窝移动网络传输
|
||||
*/
|
||||
TRANSPORT_CELLULAR,
|
||||
|
||||
/**
|
||||
* 使用Wi-Fi传输
|
||||
*/
|
||||
TRANSPORT_WIFI,
|
||||
|
||||
/**
|
||||
* 使用蓝牙传输
|
||||
*/
|
||||
TRANSPORT_BLUETOOTH,
|
||||
|
||||
/**
|
||||
* 使用以太网传输
|
||||
*/
|
||||
TRANSPORT_ETHERNET,
|
||||
|
||||
/**
|
||||
* 使用 VPN 传输
|
||||
*/
|
||||
TRANSPORT_VPN,
|
||||
|
||||
/**
|
||||
* 使用 Wi-Fi Aware 传输
|
||||
*/
|
||||
TRANSPORT_WIFI_AWARE,
|
||||
|
||||
/**
|
||||
* 使用 LoWPAN 传输
|
||||
*/
|
||||
TRANSPORT_LOWPAN,
|
||||
|
||||
/**
|
||||
* 其他
|
||||
*/
|
||||
OTHER
|
||||
}
|
||||
Reference in New Issue
Block a user