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

Kotlin实现Android应用网络连接有效性验证的正确方案

在Kotlin开发的Android应用中检查网络连接的正确方式

StackOverflow及网络上多数旧方法已被废弃,仅检查网络是否存在或判断Wi-Fi、蜂窝数据等传输类型并不够——比如网络显示可用但实际是EDGE网络、突然断开或无法正常通信的情况。最佳方案是利用系统框架内置的机制验证网络实际可联网,无需应用自行发送Ping请求。

实现代码

private fun android.content.Context.isNetworkAvailable(): Boolean {
    val connectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
    val nw = connectivityManager.activeNetwork ?: return false
    val actNw = connectivityManager.getNetworkCapabilities(nw) ?: return false
    return when {
        actNw.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
                actNw.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) &&
                actNw.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED) &&
                (actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ||
                        actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) ||
                        actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) ||
                        actNw.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH)) -> true
        else -> false
    }
}

代码解释

  • 使用android.content.Context作为扩展函数的接收者,避免重复导入;若项目中多次使用,可提前导入android.content.Context后直接用Context。
  • 初始化ConnectivityManager、当前活跃网络及网络能力对象,任何一步为空则直接返回false。
  • 检查NET_CAPABILITY_INTERNET:确认网络具备访问互联网的基础能力。
  • 检查NET_CAPABILITY_VALIDATED:这是核心验证项,确保网络已通过系统验证,可正常连接互联网。
  • 检查NET_CAPABILITY_NOT_SUSPENDED:确保网络未被系统暂停(比如低电量模式下的限制)。
  • 最后验证网络属于支持的传输类型(Wi-Fi/蜂窝/以太网/蓝牙),所有条件满足则返回true,否则返回false。

这种方式能100%验证网络连通性,切勿仅依赖空值检查或简单的网络状态标识。

内容的提问来源于stack exchange,提问作者Pavlos Theodorou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:00:05