2017-08-29 19 views
0

アプリケーションでBluetoothデバイスを切断すると、iOSデバイスは約10秒間その接続を保持し続けることに気付きました。私はこれを回避しようとしましたが、BluetoothモジュールがiOSデバイスとの接続を取り消す特性に書きましたが、動作しませんでした(主にモジュールを変更したために、私はデバイスがどこかにキャッシュされていると仮定します)。コードで即座に切断する方法はありますか?現在、スウィフトコマンド manager.cancelPeripheralConnection(peripheral)を使用しています。iOS BLEの切断時間

答えて

1

残念ながら、ありません。周辺機器を切断するようにシステムに指示する唯一の方法は、既に使用しているcancelPeripheralConnectionメソッドを使用することです。それでも、このメソッドを呼び出すと、必ずしも周辺機器が切断されるというわけではありません。 iOSの上

背景

全体BLE接続管理は、オペレーティングシステムによって維持されます。これは、単一のアプリケーションが接続を「所有」していないことを意味します。複数のアプリケーションが中央および周辺機器にアクセスできるように、すべてのBLE機能が多重化されています。

たとえば、心拍センサーからのデータをバックグラウンドで追跡するフィットネスアプリケーションをインストールした場合、アプリケーションの心拍センサーにも「接続」できますが、実際の切断を開始することはできませんフィットネスアプリが接続を維持している限り。

あなたが気づいた切断遅延は、基本的にオペレーティングシステムの最適化です。アプリケーションが周辺機器への接続を保持しなくなった場合、不要な接続/切断サイクルを回避するためにしばらく待ってから、Bluetoothチップの切断をトリガーします。

希望に役立ちます。

+0

BLEモジュールを取り外すと、オペレーティングシステムが強制的に接続を切断しますか、それともそれを保持しますか? – Ubarjohade

+1

理論的にうまくいくはずですが、いくつかの問題があります。まず、iOSは(接着/ペアリングを使用して)しばらくの間、自動的に再接続を試みます。第二に、接続パラメータ、接続監督タイムアウト、スレーブレイテンシを特に考慮する必要があります。彼らは、いつ接続が失われたとみなされるかを決定します。ペリフェラル側から切断すると、前述のパラメータに応じて中央に接続が表示されます。詳細については、次のリンクを参照してください:https://devzone.nordicsemi.com/question/60/what-is-connection-parameters/ –

0

iOSでは、CBCentralManagerメソッドcancelPeripheralConnection(CBPeripheral)を呼び出すと、必ずしもただちに接続が終了するとは限りません。 Appleのドキュメントには、状態として:

Because other apps may still have a connection to the peripheral, canceling a local connection does not guarantee that the underlying physical link is immediately disconnected. From the app’s perspective, however, the peripheral is considered disconnected, and the central manager object calls the centralManager:didDisconnectPeripheral:error: method of its delegate object.

あなたは、すぐにプログラムで接続を終了する必要があり、他の中央装置から接続する周辺機器を解放するか、自分のセキュリティ層をリセットするために言うならば、あなたは従う必要があり次のStackOverflowスレッドで説明する手順:通常の方法で切断する周辺機器を伝える末梢(例えば「GAPRole_TerminateConnection」または「GAP_TerminateLinkReq」に独自の独自のコマンドを送信するためのアプリです

iOS 6 - Bluetooth LE disconnect

または"LL_Disconnect"または理由 "HCI_DISCONNECT_REMOTE_USER_TERM"を持つ "HCI_Disconnect [_ *]")。これはいつも動作し、ではないは、中央デバイス(すなわち、iOS)に通知する公式の切断であるため、接続監視タイムアウトによって遅延される。範囲外になるように切断が計画されていない場合、または「LL_EXT_DisconnectImmed」のようにリモートデバイスに通知することなく周辺機器が切断された場合、監視タイムアウト(iOSでは最大6秒、Androidではデフォルトで20秒)が有効になります"(いくつかのBLE周辺実装でのみ利用可能です)。

関連する問題