# Android 13 实现网络共存

一、修改点一:NetworkFactoryImpl.java

文件路径:
frameworks/libs/net/common/device/android/net/NetworkFactoryImpl.java

改动内容

handleRemoveRequest() 中增加 系统属性开关,用于控制是否允许释放网络请求。

private void handleRemoveRequest(NetworkRequest request) {
    // start
    boolean isNetworkCoexistEnabled = SystemProperties.getBoolean(
        "persist.sys.network_coexistence", false
    );
    if (!isNetworkCoexistEnabled) {
        return;  // 网络共存开启时,禁止移除网络请求
    }
    // end

    NetworkRequestInfo n = mNetworkRequests.get(request);
    if (n != null) {
        mNetworkRequests.remove(request);
        if (n.requested) mParent.releaseNetworkFor(n.request);
    }
}

效果

  • persist.sys.network_coexistence=false → 维持原有行为,正常释放网络。
  • persist.sys.network_coexistence=true → 阻止网络请求移除,保留多网络共存。

二、修改点二:ConnectivityService.java

文件路径:
packages/modules/Connectivity/service/src/com/android/server/ConnectivityService.java

改动内容 1:延时断开逻辑

原本系统在超时后会强制调用 nai.disconnect() 断开网络。
修改后,加入属性判断:

mHandler.postDelayed(() -> {
    // start
    boolean isReleaseNetwork = SystemProperties.getBoolean(
        "persist.sys.network_coexistence", false
    );
    Log.e(TAG, "disconnect isReleaseNetwork = " + isReleaseNetwork);
    if (!isReleaseNetwork) {
        return;  // 阻止断开,保持网络共存
    }
    // end

    nai.disconnect();
}, timeoutMs);

改动内容 2:直接断开逻辑

在某些地方系统会直接调用 nai.disconnect(),这里也加入开关:

// start
boolean isReleaseNetwork = SystemProperties.getBoolean(
    "persist.sys.network_coexistence", true
);
Log.e(TAG, "disconnect isReleaseNetwork = " + isReleaseNetwork);
if (!isReleaseNetwork) {
    return;  // 阻止断开
}
// end

nai.disconnect();

三、整体机制

通过 SystemProperties 定义全局开关:

  • 属性名persist.sys.network_coexistence
  • 默认值false(保持 Android 原生行为,即单网络模式)
  • 开启值true(允许多网络同时存在,不主动断开)

四、应用场景

  1. 车机系统:同时保持 4G 蜂窝网络热点共享,保证车载服务与热点用户同时可用。
  2. 嵌入式平板:在使用 VPN 专网 的同时,保持蜂窝/以太网不被断开。
  3. 开发/测试环境:便于同时监控不同网络链路的行为。

五、总结

本改动通过在 NetworkFactoryImplConnectivityService 的网络释放逻辑中加入 SystemProperties 开关,实现了「可控的网络共存」。

  • 默认情况下,系统行为不变,保持 Android 原生的网络优先与切换机制。
  • 当设置 persist.sys.network_coexistence=true 时,系统不再主动释放已有网络,达到 多网络共存 的效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值