0
私は、発見されたデバイスに接続しており、RSSIを定期的に読んでいます。私は接続が失われたときを正確に知る必要があります。接続タイムアウトを指定する方法はありますか?その後、RxBleConnectionState.DISCONNECTED
を受け取りますか?接続されたデバイスの電源がオフになっていても、今でもまだrxBleConnection.readRssi()
からrssiを受信しています。RxAndroidBle接続タイムアウト
接続タイムアウトの代わりにProximity Bluetoothプロファイルからリンク損失サービスを使用する必要がありますか?
マイコード:
device1ConnectionSubscription = device.establishConnection(false)
.doOnUnsubscribe(this::clearDevice1Subscription)
.observeOn(AndroidSchedulers.mainThread())
.flatMap(rxBleConnection ->
Observable.interval(500, TimeUnit.MILLISECONDS)
.flatMap(sequence -> rxBleConnection.readRssi())
.observeOn(AndroidSchedulers.mainThread())
)
.subscribe(this::updateDevice1Rssi, this::onConnectionFailure);
device1ConnectionStateChangesSubscription = device.observeConnectionStateChanges()
.doOnUnsubscribe(() -> device1ConnectionStateChangesSubscription = null)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
connectionState -> {
switch(connectionState)
{
case DISCONNECTING:
case DISCONNECTED:
if(device1ConnectionSubscription != null) {
device1ConnectionSubscription.unsubscribe();
}
device1ConnectionStateChangesSubscription.unsubscribe();
break;
}
},
throwable -> { }
);
したがって、妥当な時間内に接続損失(ホスト電源オフ)を検出する方法はありますか?私は距離の増加による信号損失を検出できますが、接続されたデバイスがまだ動作しているかどうかを知る必要があります。 – Mordi
接続監視のタイムアウトを小さくすると、時間を短縮できますが、クライアントではなくデバイスのベンダーに依存します。 –
'' Connection Supervision Timeout'に関する記事がある 'classycode'ブログの記事があります(https://blog.classycode.com/a-short-story-about-android-ble-connection-timeouts-and- gatt-internal-errors-fa89e3f6a456)。 TL; DR-はAndroidでは20秒にハードコードされています。 –