我们的应用程序试图解决一个严重的人道主义问题,但是 - 不可否认,但有很好的理由 - 高度依赖于手机与我们的WiFi接入点的关联速度。这甚至是正确的,特别是如果用户暂时没有触摸他们的手机,也许我们会短暂地进入他们的范围。大部分发生在细胞范围之外。
其次很重要,尽管我们尽最大努力阅读平台文档和其他公开信息,但我们有时会看到电话连接到接入点之前的几分钟,有时接近一小时它会持续且非常强大接待。在这两个平台上,我们的应用程序已为此目的预先配置了SSID,但使用用户创建的SSID的性能也很有趣。
让我们以Android为例,因为它的理念更加透明且适合应用程序(例如,如果该应用程序的核心功能受到不利影响,则表示关注&#34 ;通过电池优化)。在确定最短响应时间的极端实验中,手机配置为:
所以问题是:
我们甚至愿意购买咖啡或晚餐,旅行,支付咨询费率,以支持具有适当专业知识的人。
更新:所以很明显,即使被动地监听AP信标是可能的,合理的和预期的,Android也不会监听WiFi信标,除非它主动扫描。换句话说,为了最大化关联响应,您必须将WifiManager.startScan()置于紧密(15 Hz)循环中。
所以......要做到这一点,你必须让代码一直在运行,从SCAN_RESULTS_AVAILABLE_ACTION意图接收器开始一个新的扫描实际上变得很容易。这个代码实际上会在打瞌睡期间继续运行(IDLE状态),这太棒了! (对电池寿命TBD的影响,但显然不为零)
现在的问题是WiFi无线电在该模式下关闭,即使WifiManager.isWifiEnabled()仍然报告为真。扫描只需在20毫秒而不是4000毫秒内返回。我正在考虑是否有任何远程WiFi相关API会触发它唤醒,如P2P,WPS或Hotspot2。
第二次更新:P2P和WPS没有效果。但是在20毫秒内返回的扫描仍在扫描 - 你可以看到ScanResults正在改变!然而,似乎经常依赖于打盹模式。在完全IDLE下,它每隔约130秒发生一次,而IDLE_MAINTENANCE仍然连续发生,就像在ACTIVE和INACTIVE状态下一样。但是,这仍然没有在90%的时间内扫描。