Android网络管理类

        自定义网络管理类不仅可以实现基本的网络请求和数据传输功能,还能够有效地处理网络请求过程中可能出现的各种异常情况,如网络连接异常、超时等。此外,通过封装网络请求逻辑,可以降低代码的耦合度,提高代码的可维护性和复用性,有利于项目的长期发展和维护。

import android.content.Context
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest

/**
 * A utility class to handle various network-related operations in Android.
 */
class NetworkUtils(private val context: Context) {

    // 获取 ConnectivityManager 实例
    private val connectivityManager =
        context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

    /**
     * 检查设备是否已连接到互联网。
     */
    fun isInternetAvailable(): Boolean {
        val activeNetwork = connectivityManager.activeNetwork
        return activeNetwork != null
    }

    /**
     * 检查设备是否已连接到网络。
     */
    fun isNetworkConnected(): Boolean {
        val networkCapabilities =
            connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
        return networkCapabilities != null &&
                (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ||
                        networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR))
    }

    /**
     * 检查设备是否通过 Wi-Fi 连接。
     */
    fun isWifiConnected(): Boolean {
        val networkCapabilities =
            connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
        return networkCapabilities != null && networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
    }

    /**
     * 检查设备是否通过移动数据连接。
     */
    fun isMobileData(): Boolean {
        val networkCapabilities =
            connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
        return networkCapabilities != null && networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
    }

    /**
     * 获取当前的网络信息。
     */
    fun getActiveNetworkInfo(): Network? {
        return connectivityManager.activeNetwork
    }

    /**
     * 注册网络回调以监听网络变化。
     */
    fun registerNetworkCallback(networkCallback: ConnectivityManager.NetworkCallback) {
        val networkRequest = NetworkRequest.Builder().build()
        connectivityManager.registerNetworkCallback(networkRequest, networkCallback)
    }
}

下面是使用示例

// 在 Activity 或 Fragment 中使用 NetworkUtils 类
val networkUtils = NetworkUtils(context)

// 检查设备是否已连接到互联网
val isInternetAvailable = networkUtils.isInternetAvailable()

// 检查设备是否已连接到网络
val isNetworkConnected = networkUtils.isNetworkConnected()

// 检查设备是否通过 Wi-Fi 连接
val isWifiConnected = networkUtils.isWifiConnected()

// 检查设备是否通过移动数据连接
val isMobileData = networkUtils.isMobileData()

// 获取当前的网络信息
val activeNetworkInfo = networkUtils.getActiveNetworkInfo()

// 注册网络回调以监听网络变化
val networkCallback = MyNetworkCallback()
networkUtils.registerNetworkCallback(networkCallback)

你可能感兴趣的:(1024程序员节)