私はカスタムBluetoothデバイスと通信するAndroidアプリで作業しています。 BluetoothGatt.Disconnect()
を呼び出した後で、OnConnectionStateChange
コールバックが呼び出され、新しい状態がDisconnected
であることがわかりましたが、そのときとデバイス自体が実際に切断されている間に時間差があるようです。たとえば、接続したデバイスでBluetoothManager.GetConnectionState(...)を呼び出すと、Connectedが返されます。場合によっては、秒の前にGetConnectionState
が返され、Disconnected
が返されることがあります。これは正常ですか?私のアプリケーションでこれを引き起こしている可能性がありますか?例えば非UIトレッドから切断するか、それとも何か?または、物理的なブルートゥースデバイス自体が切断を適切に処理していない可能性があり、切断イベントを速やかに完了できない可能性がありますか?Android BLE GATT DisconnectedとDevice Disconnected
答えて
"disconnect()"を呼び出すと、クライアントオブジェクト(BluetoothGattオブジェクト)の接続を切断するだけです。同じ物理デバイスに複数のBluetoothGattオブジェクトを接続できます。複数のアプリは、同じデバイスに接続された独自のBluetoothGattオブジェクトを持つこともできます。
「disconnect()」と呼ぶと、リクエストはシステム内のBluetoothスタックで処理され、要求の処理が完了したらすぐにアプリケーションのonConnectionStateChangeコールバックを呼び出します。ただし、他のすべてのクライアントが切断されるまでリンクを切断しません。 Androidの新しいバージョンでは、数秒で物理的切断が遅れる(理由は不明)。また、切断要求がBluetoothコントローラに送信されると、リモートデバイスが切断(またはタイムアウト)を認識する必要があるため、実際に切断するには時間がかかることがあります。デフォルトのタイムアウトは、最近のAndroidバージョンで5秒に変更されるまで20秒でした。
AndroidのBLEシステムが非常に混乱しています。あなたがAndroidから接続を解除したところで、もっと悪いことを除いて、あなたが何を記述したのか見てきましたが、それは周辺機器との永続的な接続を維持しています。
通常、最終的に切断するまでに30秒かかることがあります。すべてあなたがその時に使用していた電話に依存します。
能力がある場合は、周辺機器に切断特性を追加することを強く推奨します。そのため、実際に切断要求を書き留めて周辺機器に強制的に切断させ、その後Androidがそれを受け取るようにしてください。
私が見たメリットは、いつも動作しているということです(なぜなら、「ハード」切断は常にAndroidによって行われ、「ソフト」切断要求は特定の電話で問題を引き起こす可能性があるからです)。通常、「良い」電話機はこの動作(特にMarshmallowとon)を表示しませんが、それらのKitKatの日に戻ってきます.... Wow ....
別の利点... iOSを使用している場合、切断された周辺機器をスキャンまたは再接続することができます。
- 1. Eclipse Logcat:「Device disconnected」と表示されます
- 2. Angular2 [WDS] Disconnected! nignx
- 3. Disconnected環境のローカルレポートオプション?
- 4. org.apache.kafka.clients.NetworkClientブートストラップブローカブートストラップサーバ - IP:9092 disconnected
- 5. EF vs Nhibernate Merge Disconnected Object Graph
- 6. kafka python - Bluemix MessageHub - ConnectionError:socket disconnected
- 7. BLE GATTサーバー名
- 8. Azure通知ハブ「WNS Channel Disconnected」エラー
- 9. サービスv/w Android BLE APIのGatt接続
- 10. TI CC2541 no BLE GATT通信
- 11. BLE GATTサーバーのデータ・フォーマット
- 12. org.elasticsearch.transport.NodeDisconnectedExceptionの取得:[] [inet [localhost/127.0.0.1:9300]] [クラスタ/ノード/情報] disconnected
- 13. ILはDisconnected Context Errorを出力します
- 14. "disconnected"状態のすべてのユーザーを表示
- 15. onCharacteristicChangedがAndroid BLE GATTサービスで呼び出されない
- 16. gattスタックに登録できませんでしたエラーBLE androidサムスン
- 17. BLEはUWP GATTクライアントを示します
- 18. Android複数のBLE特性をPriorityQueueで読み取る方法
- 19. GATT接続後にBLEデバイスとペアリングする方法
- 20. Chrome拡張機能複数のポートでDisconnected Portエラーが発生する
- 21. Disconnected:サポートされている認証方法がありません(サーバー> send:publickey)
- 22. Disconnected:サポートされている認証方法がありません。(server sent publickey)
- 23. Bleデバイスを見つけるGATTサービスをお勧めします
- 24. BLE `onCharacteristicRead`が動作しない
- 25. Android 6.0.1のGattキャッシュ
- 26. Java BLEサービスが返されない
- 27. BLE
- 28. Android BLE CallBacks、OnRead/OnWrite Super
- 29. BLE GATT特性を使用したストリーミングデータのスキーム
- 30. デイドリームコントローラBLE GATTの出力を解析する方法は?
ご清聴ありがとうございます。デバイスが実際に切断されたときにコールバックイベントを取得できるかどうか知っていますか? – PICyourBrain
https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#ACTION_ACL_DISCONNECTEDを聞くには、放送受信機を登録するだけです。 – Emil