アプリを Bluetooth 4.0 デバイスに接続するのにかかる時間は、かなり異なるようです。同じアプリ、同じデバイス。1 秒もかからずにすぐに接続されることもあります。10~12秒ほどかかることもあります。そして、まったく接続しないときがあります-スキャンを再開する必要があります。他の誰かがこの問題を見たことがあるかどうか疑問に思っていました. 何が原因でしょうか?
2 に答える
これにはいくつかの理由が考えられます。ここに私の頭の上のいくつかがあります。
デバイスはあまりアドバタイズしていません。O/S は基本的に、広告信号を送信しているデバイスをスキャンします。これは、バッテリーの電力を節約するために、デバイスができるだけ頻繁に実行しないことです。一部のデバイスには、接続をセットアップする際により頻繁にアドバタイズするためのボタンがあります。他には、広告率を変更できる設定がある場合があります。(どのデバイスを使用していますか?)
デバイスが別のデバイスに接続されている可能性があります。
電池残量が少ない可能性があります。
別のソースからの無線干渉がある可能性があります。WiFi は頻繁に問題になります。Bluetooth 4.0 デバイスと WiFi デバイスの両方が周波数ホッピングを使用します。WiFi ネットワークをオフにするか、再起動してみてください。電話で WiFi をオフにしてみて、問題が解決するかどうかを確認してください。
もちろん、それを認めたくはありませんが、アプリで何か間違ったコードを記述した可能性が常に潜んでいます! 接続が 1 つしかないという事実は、アプリが完璧であることを保証するものではありません。
私も同じ問題を見つけています。2 秒ごとにアドバタイズする BLE デバイスがあります。
[self.CM scanForPeripheralsWithServices:nil options:0]
0.2 秒から ~30 秒後に戻ります。(CM は私の CentralManger です)
次のステップは、時間を CSV ファイルに収集し、さまざまな接続時間の度数分布と時間に対する接続時間をプロットして、パターンを識別できるかどうかを確認することです。
便利な TIデモンストレーター アプリがあります。しかし、厄介なことに、彼らはそれをユニバーサルにし、iPad ストーリーボードを実装していません (そこにあり、空白です)。iPhone のみのバージョンに設定すると、デバッグ モードで実行しようとするとエラーが発生します。また、BLE を備えた別の Apple デバイスを手元に持っていません。
通話中
[self.CM stopScan];
scanWithPeripherals が非常に長い待機の発生を減らすように見える前に。
このStackoverflowの回答に見られるように、CBCentralManagerScanOptionAllowDuplicatesKeyオプションを試しましたが、発見時間が長くなるように見えた場合。
実際に空中にあるものを確認するのに役立つ、いくつかの Bluetooth パケット スニファ ツールを入手できると思います。