2016-10-02 25 views
0

電話機を再起動した後、周辺機器を再接続しようとしました。再起動後にBluetooth周辺機器に接続する

バックグラウンドでBLE接続プロセスを開始するために、ロケーション更新コールバックを使用しています。 BLEスタックが正しくバックグラウンドで初期化され

任意のアイデア

は、再起動後にデバイスを再接続するために...開始され、周辺に

「接続」(CBCentralManagerStatePoweredOnイベントが送信される)が、何の接続が確立されていませんか?

答えて

0

ペリフェラルの「接続」が開始されたと言うときは、connectPeripheralを使用して手動で接続することを意味しますか。私は過去にiOS上での接続に苦労し、CoreBluetoothには内部的に多くの競合条件が存在しないことに気づいた。一般的に私が推奨するのは、CoreBluetoothコールバックの後に起こる20ms以上のすべての接続要求に対して常にディスパッチ遅延を行うことです。これにより、ほとんどの競合状態が回避されます。たとえば、保留中の接続を設定し、後でcancelPeripheralConnection:を呼び出して、周辺機器が接続されていることを確認することができます。 didFailToConnectコールバックを取得したら直ちにconnectPeripheral:を再度呼び出します。これで、接続状態は「接続中」の「limbo」モードになりますが、実際には接続されません。もう一度connectを呼び出すと、この時点で何も行われません。

これが問題の原因であるかどうかわかりませんが、それが原因である可能性があります。また、CentralManagerの状態を復元するときに、フレームワークを1秒間「解決」してから相互作用を開始することをお勧めします。

もう1つ重要なことは、あなたがAppDelegateのapplicationDidFinishLaunchingWithOptions:コールバックを取得するまでマネージャーを再起動しないことです。これを先に行うと、奇妙な動作が発生する可能性があります。

さらに詳しい調査を行い、まだ問題が残っている場合はお知らせください。私はいくつかのヒントを持っているかもしれません。 /アントン

関連する問題