连接管理器 - AllNetworks 已弃用

Has*_*ssa 5 android kotlin

在替换此已弃用的代码以检查设备上的互联网连接时,有人可以为我指出正确的方向吗?

private val isNetworkAvailable = MutableStateFlow(false)

fun checkNetworkAvailability(context: Context): MutableStateFlow<Boolean> {

    val connectivityManager =
        context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    connectivityManager.registerDefaultNetworkCallback(this)

    var isConnected = false
    // allNetworks Deprecated
    connectivityManager.allNetworks.forEach { network ->
        val networkCapability = connectivityManager.getNetworkCapabilities(network)
        networkCapability?.let {
            if(it.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
                isConnected = true
                return@forEach
            }
        }
    }

    isNetworkAvailable.value = isConnected

    return isNetworkAvailable
}
Run Code Online (Sandbox Code Playgroud)

Nit*_*ish 11

您可以获取活动网络并检查其当前是否已连接

private fun isNetworkAvailable(): Boolean {
        val connectivityManager =
            getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val network = connectivityManager.activeNetwork // network is currently in a high power state for performing data transmission. 
            Log.d("Network", "active network $network")
            network ?: return false // return false if network is null
            val actNetwork = connectivityManager.getNetworkCapabilities(network) ?: return false // return false if Network Capabilities is null
            return when {
                actNetwork.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> { // check if wifi is connected
                    Log.d("Network", "wifi connected")
                    true
                }
                actNetwork.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> { // check if mobile dats is connected
                    Log.d("Network", "cellular network connected")
                    true
                }
                else -> {
                    Log.d("Network", "internet not connected")
                    false
                }
            }
        }
        else{
          val activeNetwork = connectivityManager.activeNetworkInfo

          return if (activeNetwork != null) {
            when (activeNetwork.type) {
                ConnectivityManager.TYPE_WIFI -> true
                ConnectivityManager.TYPE_MOBILE -> true
                else -> false
            }
           }else {
            false
           }
         }
    }
Run Code Online (Sandbox Code Playgroud)

注意connectivityManager.activeNetwork需要许可android.permission.ACCESS_NETWORK_STATE