BLE在拥挤的频谱中以低功率发射。一些数据包丢失是可以预期的(尽管我同意它比我想要的更多)。
更高级别的协议将检测数据包丢失并请求重新传输。对于BLE,您可以实际连接到设备,然后使用通知,而不是使用广告来获取数据。这些更可靠,不应该被删除。缺点是大多数设备仅支持连接到少数几个外围设备,通常是7.听广告不需要连接,因此对您可以收听的广告商数量没有固定限制。
数据包丢失还取决于正在收听的内容。 nRF51822在零范围内使用Android 5.0传输到我的Nexus 4,获得了> 50%的PLOS。当传输到另一个nRF51822时,它获得大约20%的PLOS。我猜Nexus 4试图节省电力,所以也许它不会持续听。
我有类似的问题,只有一些数据包到达。看起来启用带有扫描仪的SCAN_MODE_LOW_LATENCY模式有助于 - 您的设备将继续持续监听,因此不会遗漏任何数据(除非有像Timmmm建议的杂乱,不良范围等)。
https://developer.android.com/reference/android/bluetooth/le/ScanSettings
希望这可以帮助