(免责声明:我在附近共享上工作)
Nearby Share 将始终在发送大于 1MB 的文件之前尝试升级到 WiFi。在回退机制启动之前,该升级有 10 秒的宽限期,文件作为最后的手段通过蓝牙发送。即使在回退到蓝牙后,设备仍会继续尝试在后台升级到 WiFi,但有些故障是无法恢复的,文件将完全通过蓝牙发送。请注意,url 和非常小的文件将立即通过蓝牙发送。
由于多种原因,此升级可能会失败。最常见的是,这是一个并发问题。相同的无线电用于蓝牙、p2p WiFi 和您的正常接入点连接,并且必须相应地分时。如果这三个人都想在不同的频道上,你会错过消息——这是一个保证。如果这些消息很重要,例如通过 WiFi Direct 连接时的身份验证帧,则连接将失败。如果这些消息不太重要,它们可能会被重新发送,直到成功接收,但它会降低传输的吞吐量,因此即使是 5GHz WiFi 也可能看起来像蓝牙一样慢。
附近共享试图通过几种方式避免这种情况。当法规允许时,我们将尝试在与接入点相同的频道上启动 WiFi Direct 组。这样手机就不用分时了(虽然确实有和接入点发来的消息冲突的副作用。但一般情况下双方都会回退一个随机量重传,损失小于损失多通道并发)。不幸的是,许多国家确实有规定只允许在室内使用某些(或全部)5GHz 信道——在这种情况下,可以设置接入点以使用它,但 WiFi Direct 不能。
我们也更喜欢 WiFi Direct 等媒体而不是 Hotspot,因为 WiFi Direct 通常使用 CTS2SELF 帧来宣传“在此期间请勿传输”。不幸的是,它不像“我要离开频道,不要尝试与我交流”那样简单直接的消息——CTS2SELF 的副作用是让接入点上的所有通信都安静下来,即使它不是针对手机的——但它确实明白了这一点。
我们暂停任何我们可以控制的蓝牙活动,以减少与其分时共享的需要。在一些严重的情况下,如果 OEM 实施了过于激进的分时,我们将关闭蓝牙无线电以强制中断蓝牙活动,但这具有破坏性并且通常会导致糟糕的用户体验。
我们可能会尝试通过您的接入点本身发送数据,而不是设置 WiFi Direct。这可以避免上面描述的 MCC 情况,但代价是数据需要重新加密(因为我们不知道 LAN 上连接了哪些其他设备并且可能被窃听),并且它确实引入了另一个跃点,因为即使设备并排,数据也需要通过 AP。TDLS 有助于避免最后一个问题,但它有局限性(例如,如果没有为它设置 AP,它不会使用 40/80/160MHz 带宽,如果 AP 在 2.4 上,它将通过 2.4GHz 发送赫兹)。
其他可能的故障包括设备进入错误状态(切换飞行模式可以提供帮助)、Android 版本太低(理想情况下两台设备都应该是 R+,因为几乎不可能修复旧 Android 操作系统版本上的错误,即使我们尝试),或者只是运气不好。