この問題は、10月にここで議論されました。CoreBluetoothはかなり新しく、それ以降にいくつかの変更が行われた可能性があるため、これは新しい質問です。
2秒ごとにアドバタイズするBLEデバイスがあります。スキャンは以下を使用して開始されます。
[self.CM scanForPeripheralsWithServices:nil options:0]
これは、2秒から4秒後に(centralManager didDiscoverPeripheralコールバックを介して)最も頻繁に返されます。(CMは私のCentralMangerです)
ただし、約30%の時間、スキャンには10〜18秒かかります。近くのデバイスのWiFiとBTは、可能な限りスペクトルをクリアするために無効になっています。スキャンする時間はRSSIとは無関係のようです。これは、iPAd3の隣にある場合は-40dB、別の部屋に約5メートル離れている場合は-70dBです。
[self.CM stopScan];
scanWithPeripheralsの前に呼び出されます。これは、非常に長い待機の発生を減らすためです。
接続は確立されていません。特性データまたはサービスデータは要求されていません。広告データで十分です。
便利なTIデモンストレーターアプリがあります。これにより、同様の結果が得られます(stopScan呼び出しを行わないため、実際にはわずかに悪化します)
このStackoverflowの回答に見られるように、CBCentralManagerScanOptionAllowDuplicatesKeyオプションは、検出時間が長くなると思われる場合に使用します。
明らかに、次のステップは、いくつかのより高度なBTスニファ/広告生成ツールを使用して、このCoreBluetooth応答をさらに特徴づけることです。
これはもう1つの有用なSOの質問ですが、応答時間については十分に詳しく説明されていません。