Google Nearby Connections Wifi模式无数据传输问题排查求助
我之前在调试Nearby Connections的WiFi模式时也碰到过类似的稳定性问题,结合你用Motorola G4/G5的场景,给你几个针对性的排查方向:
先确认WiFi权限与系统基础功能
首先得把基础权限和功能的坑填上:两台设备都要确保授予了ACCESS_WIFI_STATE、CHANGE_WIFI_STATE权限,Android 10及以上版本还必须开ACCESS_FINE_LOCATION(Nearby靠位置服务辅助设备发现)。另外手动测试一下G4的热点功能——直接开热点让G5连接,看看能不能正常传个文件,排除系统或硬件层面的热点故障。Motorola的定制ROM有时候会限制第三方APP调用热点,去系统的权限管理里看看有没有相关的限制开关。拆分WiFi模式单独测试
Star策略默认会同时尝试WiFi Direct和热点两种方式,你可以强制指定单一模式来定位问题:- 在初始化
AdvertisingOptions和DiscoveryOptions时,设置setStrategy(Strategy.STAR)后,再加个setMedium(Medium.WIFI_DIRECT)或者setMedium(Medium.HOTSPOT),分别测试两种WiFi子模式。比如先试WiFi Direct,看能不能建立连接;再试纯热点模式,观察连接后Payload的传输回调是否触发。 - 另外别忘了检查
PayloadCallback的实现——有时候不是没传输,是你没正确监听onPayloadReceived和onPayloadTransferUpdate,导致误以为没数据。
- 在初始化
对齐系统与服务版本
Motorola G4和G5的系统版本可能有差异(比如G4停在Android 7/8,G5是Android 8/9),不同版本的Google Play Services(Nearby依赖这个服务)可能存在兼容性问题。先把两台设备的Google Play Services更到最新,重启后再测试。另外有些旧设备的WiFi Direct模块有bug,可以去开发者选项里关掉WiFi Direct,强制Nearby用热点模式试试。抓包定位连接/传输瓶颈
如果前面的方法都没找到问题,就用抓包工具来分析:- 热点模式下:用Android Studio的Network Profiler或者tcpdump,分别抓G4(广告端)和G5(发现端)的WiFi数据包,看连接后有没有握手成功,Payload的数据包有没有发出/接收。
- WiFi Direct模式下:重点看P2P协商的报文,有没有出现连接超时、拒绝的情况。
对比蓝牙模式的配置差异
既然Cluster(纯蓝牙)能正常跑,把两种模式的代码配置对比一遍:比如Star模式下有没有漏加回调、权限申请是否完整,设备的角色(advertiser/discovery)有没有搞反?有时候角色错误在WiFi模式下会直接失败,但蓝牙模式容错性更强,所以能正常运行。
内容的提问来源于stack exchange,提问作者Johannes

