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

如何基于ConnectivityManager获取的原网络信息构建NetworkRequest恢复历史连接

直接绑定原网络的可行性

你完全可以跳过网络请求步骤,直接绑定已经获取到的defaultNetwork对象,只要该网络还处于活跃状态即可:

  • 先验证原网络有效性:调用connectivityManager.getNetworkCapabilities(defaultNetwork),如果返回值不为null,说明网络仍存活
  • 直接执行connectivityManager.bindProcessToNetwork(defaultNetwork)即可完成切回,不需要额外构造请求

构造NetworkRequest的方案

如果原网络已经被系统断开(验证时返回null),需要重新请求匹配的同规格网络,不需要遍历所有defaultCapabilities添加,仅需添加核心匹配条件即可,避免冗余的系统私有能力导致匹配失败,示例代码如下:

// Java 示例代码
if (defaultCapabilities != null) {
    NetworkRequest.Builder builder = new NetworkRequest.Builder();

    // 1. 添加原网络的传输类型(WiFi/蜂窝/以太网等)
    int[] transportTypes = {
        NetworkCapabilities.TRANSPORT_WIFI,
        NetworkCapabilities.TRANSPORT_CELLULAR,
        NetworkCapabilities.TRANSPORT_ETHERNET,
        NetworkCapabilities.TRANSPORT_BLUETOOTH
    };
    for (int transport : transportTypes) {
        if (defaultCapabilities.hasTransport(transport)) {
            builder.addTransportType(transport);
            break;
        }
    }

    // 2. 添加核心网络能力,按需扩展你业务需要的能力即可
    builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);

    // 3. 构建请求并发起
    NetworkRequest defaultRequest = builder.build();
    connectivityManager.requestNetwork(defaultRequest, defaultCallback);
}

额外注意事项

  • 网络请求的回调使用完成后,必须调用connectivityManager.unregisterNetworkCallback(defaultCallback)注销,避免内存泄漏
  • 整个逻辑需要提前申请ACCESS_NETWORK_STATE权限,否则无法获取网络信息、执行绑定操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:24:02