diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/mvvm/v/BaseFrameActivity.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/mvvm/v/BaseFrameActivity.kt index 7967014..b33690d 100644 --- a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/mvvm/v/BaseFrameActivity.kt +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/mvvm/v/BaseFrameActivity.kt @@ -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 : BaseFra * @param type Int 网络类型 * @return Unit */ - override fun networkTypeChange(type: Int) {} + override fun networkTypeChange(type: NetworkTypeEnum) {} /** * 网络连接状态更改回调 diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkCallbackImpl.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkCallbackImpl.kt index fe2d7c3..f4bbaa9 100644 --- a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkCallbackImpl.kt +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkCallbackImpl.kt @@ -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 + } + } } \ No newline at end of file diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkStateChangeListener.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkStateChangeListener.kt index 77740cb..61b6db1 100644 --- a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkStateChangeListener.kt +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkStateChangeListener.kt @@ -10,10 +10,10 @@ interface NetworkStateChangeListener { /** * 网络类型更改回调 - * @param type Int 网络类型 + * @param type NetworkTypeEnum 网络类型 * @return Unit */ - fun networkTypeChange(type: Int) + fun networkTypeChange(type: NetworkTypeEnum) /** * 网络连接状态更改回调 diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkStateClient.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkStateClient.kt index b060287..75c93b4 100644 --- a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkStateClient.kt +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkStateClient.kt @@ -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 /** * 网络是否连接 diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkTypeEnum.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkTypeEnum.kt new file mode 100644 index 0000000..cd3dc9c --- /dev/null +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/utils/network/NetworkTypeEnum.kt @@ -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 +} \ No newline at end of file