2017-08-22 29 views
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 -> { } 
     ); 

答えて

2

あなたが探しているパラメータがConnection supervision timeoutです。このパラメータはデバイスによって制御され、私はあなたの携帯電話で設定することはできませんと思います。

+0

したがって、妥当な時間内に接続損失(ホスト電源オフ)を検出する方法はありますか?私は距離の増加による信号損失を検出できますが、接続されたデバイスがまだ動作しているかどうかを知る必要があります。 – Mordi

+0

接続監視のタイムアウトを小さくすると、時間を短縮できますが、クライアントではなくデバイスのベンダーに依存します。 –

+1

'' 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秒にハードコードされています。 –

関連する問題