You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API 30及以上版本如何检测网络连接?NetworkCapabilities错误求助

问题解决:NetworkCapabilities检测网络连接报错

错误原因

你误用了API方法:hasCapability()要求传入NetworkCapabilities.NET_CAPABILITY_*系列的能力常量,而TRANSPORT_WIFI、TRANSPORT_CELLULAR属于网络传输类型标识,应该用hasTransport()方法来判断。

修正后的代码

fun checkInternetConnection(context: Context): Boolean {
    val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

    val network = connectivityManager.activeNetwork ?: return false
    val networkCapabilities = connectivityManager.getNetworkCapabilities(network) ?: return false

    return when {
        networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
        networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
        networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
        else -> false
    }
}

进阶优化(可选)

如果需要确保网络真正能访问互联网(而非仅连接上网络),建议同时验证网络有效性:

fun checkValidInternetConnection(context: Context): Boolean {
    val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

    val network = connectivityManager.activeNetwork ?: return false
    val networkCapabilities = connectivityManager.getNetworkCapabilities(network) ?: return false

    return networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
           networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
}

内容的提问来源于stack exchange,提问作者Berkay Sazak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:00:47