将我的应用程序连接到蓝牙 4.0 设备所需的时间似乎有很大差异。相同的应用程序,相同的设备。有时它会立即连接——比如不到一秒钟。有时大约需要 10-12 秒。并且一旦它根本没有连接 - 我需要重新启动扫描等。我想知道是否有其他人看到过这个问题。这可能是什么原因造成的?
2 回答
我也发现了同样的问题。我每 2 秒有一个 BLE 设备广告。
[self.CM scanForPeripheralsWithServices:nil options:0]
0.2s 到 ~30s 后返回。(CM 是我的 CentralManger)
我的下一步是在 CSV 文件中收集时间,并绘制各种连接时间的频率分布以及连接时间与时间的关系,看看我是否能辨别出一种模式。
有一个有用的 TI演示器应用程序。但令人讨厌的是,他们已经使其通用并且没有实现 iPad 故事板(它在那里并且空白),并且当我尝试在调试模式下运行时,将其设置为仅限 iPhone 版本会导致错误。而且我手头没有另一台支持 BLE 的 Apple 设备。
打电话
[self.CM stopScan];
在 scanWithPeripherals 之前似乎减少了真正长时间等待的发生。
我尝试了这个Stackoverflow 答案中看到的 CBCentralManagerScanOptionAllowDuplicatesKey 选项,但如果有任何似乎延长发现时间的东西。
我想我会得到一些蓝牙数据包嗅探器工具来帮助查看空气中的实际情况。
这可能有很多原因。这里有一些我的头顶。
该设备不经常做广告。O/S 基本上扫描正在发送广告信号的设备。这是设备为节省电池电量而尽可能少做的事情。有些设备有一个按钮,可以让它们在您建立连接时更频繁地做广告。其他人可能有允许您更改广告费率的设置。(您使用的是什么设备?)
该设备可能连接到其他设备。
电池电量可能不足。
可能有来自其他来源的无线电干扰。WiFi经常是一个问题。蓝牙 4.0 和 WiFi 设备都使用跳频。尝试关闭或重新启动 WiFi 网络。尝试关闭手机上的 WiFi,看看是否有帮助。
当然,虽然我们不愿意承认这一点,但总有一种潜在的可能性是我们在应用程序中编码错误!我们得到一个连接这一事实并不能保证该应用程序是完美的。