8、车载网络与连接:车载网络架构(Ethernet、Wi-Fi、蓝牙、蜂窝网络);CarNetworkService与网络评分;蓝牙电话与蓝牙音乐(HFP、A2DP、AVRCP);Android Auto无线连接协议
各位同学,今天我们来聊聊车载系统里最“接地气”也最“绕不开”的一块——网络与连接。说实话,做车载开发这几年,我最大的感触就是:没有稳定的连接,再酷的功能都是空中楼阁。你想想看,导航要联网、音乐要流媒体、电话要蓝牙、OTA要蜂窝……哪一样离得开网络?
这一章,我会把车载网络架构、CarNetworkService 的评分机制、蓝牙电话/音乐协议,以及 Android Auto 无线连接这几个核心知识点串起来。嗯,都是我在项目里踩过坑、填过土的地方,希望能帮你少走弯路。
8.1 车载网络架构:不止是“能连上”
先说说大背景。现在的车,说白了就是一台装了轮子的智能设备。车内的网络架构,我习惯把它分成四个层次:
- Ethernet(车载以太网):主干网,负责高速数据传输,比如摄像头、雷达、大屏娱乐。我记得最早做项目时,很多车还在用 CAN 总线传多媒体数据,那叫一个卡……后来换了 BroadR-Reach 以太网,带宽直接翻了几十倍。
- Wi-Fi:主要给乘客用,也用于 OTA 升级和无线 Android Auto。注意,车载 Wi-Fi 通常支持 2.4G/5G 双频,但 5G 穿墙能力弱,车内用反而稳定。
- 蓝牙:短距离、低功耗,电话和音乐的主力。嗯,这里有个坑——蓝牙和 Wi-Fi 共用 2.4G 频段,如果天线设计不好,互相干扰会让你怀疑人生。
- 蜂窝网络(4G/5G):车联网的“最后一公里”,T-Box 的核心。我建议优先选 5G,虽然贵一点,但低延迟对 V2X 场景太重要了。
核心观点:不要试图用一种网络解决所有问题。Ethernet 做骨干,Wi-Fi 做本地高速,蓝牙做低功耗连接,蜂窝做广域覆盖——各司其职,才是正解。
8.2 CarNetworkService 与网络评分:系统如何“选网”?
你可能会问:车上有这么多网络,系统怎么知道该用哪个?这就是 CarNetworkService 的活。它是 Android Automotive 里一个系统级服务,专门负责网络策略和评分。
说白了,它给每个可用网络打分,然后选分数最高的用。评分维度包括:
| 维度 | 权重 | 说明 |
|---|---|---|
| 信号强度 | 30% | RSSI 或 RSRP 值,越强分越高 |
| 带宽 | 25% | 实测吞吐量,Ethernet 通常满分 |
| 延迟 | 20% | ping 时延,蜂窝网络可能扣分 |
| 成本 | 15% | Wi-Fi 免费,蜂窝按流量计费 |
| 稳定性 | 10% | 历史掉线率,蓝牙可能较低 |
我在项目中遇到过一个问题:Wi-Fi 信号明明满格,但 CarNetworkService 就是不切过去。后来查代码发现,是因为 Wi-Fi 的“网关可达性”检测失败——路由器没连外网。所以评分不仅要看信号,还要看实际连通性。
避坑指南:我曾经在调试时发现 CarNetworkService 的评分回调没触发,原因是没在 manifest 里声明 android.car.permission.CAR_NETWORK_SERVICE。嗯,这种权限问题最容易忽略。
8.3 蓝牙电话与蓝牙音乐:HFP、A2DP、AVRCP
蓝牙在车载里主要干两件事:打电话和放音乐。对应的协议分别是:
- HFP(Hands-Free Profile):免提电话协议。负责语音上行下行、接听挂断。注意,HFP 1.7 以上才支持宽带语音(mSBC 编码),否则音质像对讲机。
- A2DP(Advanced Audio Distribution Profile):高级音频分发协议。就是蓝牙音乐。编码器支持 SBC、AAC、aptX、LDAC。我建议优先支持 AAC,iPhone 用户多,兼容性好。
- AVRCP(Audio/Video Remote Control Profile):音视频远程控制协议。用来控制播放/暂停、切歌、获取歌曲信息。1.6 版本以上支持封面图传输。
这三个协议通常配合使用。举个例子:你连上蓝牙,系统通过 AVRCP 获取当前歌曲名和封面,通过 A2DP 传输音频流,来电话时自动切换到 HFP 通道。嗯,这里有个细节——AVRCP 的绝对音量控制,如果没实现,用户调音量时车机和手机不同步,体验很割裂。
注意:蓝牙协议栈的兼容性是个大坑。我遇到过某款手机连上后 A2DP 无声,原因是手机只支持 aptX HD,而车机只支持 SBC。解决办法是车机端强制降级到 SBC,或者两边都支持 AAC。
8.4 Android Auto 无线连接协议:从有线到无线的进化
Android Auto 无线连接,说白了就是让手机和车机通过 Wi-Fi Direct 建立高速通道,替代原来的 USB 线。核心流程分三步:
- 发现与配对:手机通过蓝牙低功耗(BLE)广播服务 UUID,车机扫描到后发起配对。注意,这里需要同时支持蓝牙和 Wi-Fi。
- 连接建立:配对成功后,车机通过 Wi-Fi Direct 与手机建立 P2P 连接。IP 地址通过 DHCP 分配,通常车机做 Group Owner。
- 数据隧道:连接建立后,Android Auto 通过 TCP 隧道传输屏幕投射、音频、触控事件等。延迟要求小于 100ms,否则会卡顿。
我在项目中踩过最深的坑是:Wi-Fi Direct 连接成功后,手机无法上网。原因是车机作为 Group Owner 没有开启 NAT,手机流量无法通过车机蜂窝网络转发。解决方案是在车机端启用 IP 转发和 iptables 规则。
经验之谈:无线 Android Auto 的稳定性,很大程度上取决于 Wi-Fi 模块的驱动质量。我建议在车规级芯片上优先选 QCA 或 Broadcom 的方案,开源驱动坑太多。
好了,关于车载网络与连接的核心内容就这些。记住,网络是车载系统的“血管”,设计时一定要考虑冗余和降级策略。比如,Wi-Fi 断了要能无缝切到蜂窝,蓝牙电话断了要能自动重连——这些都需要你在 CarNetworkService 里写好评分和切换逻辑。
最后,送你一句话:连接的本质不是“通”,而是“可靠”。希望你在项目里少踩坑,多出活。
公众号:蓝海资料掘金营,微信deep3321