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

如何在运行Wear OS 3的三星Galaxy Watch 4上检测网络可用性

Wear OS 3.0 网络可用性检测方案

原有代码问题说明

仅检测TRANSPORT_BLUETOOTH或TRANSPORT_WIFI传输类型存在缺陷:TRANSPORT_BLUETOOTH仅代表手表与配对手机的蓝牙传输通道正常,无法验证手机侧是否具备可用上行网络,因此会出现蓝牙通道正常但实际无网络的误判。

优化后检测逻辑

在传输类型检测基础上,新增两项网络能力校验:

  • NetworkCapabilities.NET_CAPABILITY_INTERNET:标识该网络配置了公网访问路由
  • NetworkCapabilities.NET_CAPABILITY_VALIDATED:标识系统已实际验证该网络可正常访问公网

修正后的代码如下:

fun isNetworkConnected(context: Context): Boolean {
    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val activeNetwork = cm.activeNetwork ?: run {
        Log.d(TAG, "No Active Network Available")
        return false
    }
    val networkCapabilities = cm.getNetworkCapabilities(activeNetwork) ?: return false

    // 校验可用传输类型,支持eSIM的手表可额外添加TRANSPORT_CELLULAR
    val hasValidTransport = networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) 
            || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH)

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

注意事项

  • 使用该方法需要在AndroidManifest.xml中声明权限:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  • 如果应用需要兼容特殊网络环境(如企业内网、自定义DNS导致系统公网验证失败),可去掉NET_CAPABILITY_VALIDATED校验,改为在发起业务请求前主动发起轻量检测(例如对目标WebService域名发起超时2s的HEAD请求),避免系统验证误判。
  • 网络状态是动态变化的,检测结果仅代表当前瞬间状态,所有网络请求必须主动捕获IO异常、超时异常,不能仅依赖提前检测的结果避免崩溃。
  • 如果需要实时监听网络状态变化,建议使用ConnectivityManager.NetworkCallback注册回调,比轮询检测效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:15:00