2017-03-29 2 views
0

Bleデバイスの読み取りとRxAndroidBleライブラリの使用に問題があります。BxAndroidBleがデバイスを読み取ることができません、ステータス= 22

私はこのエラーを取得しておいてください。

BleGattException{status=22, bleGattOperation=BleGattOperation{description='CONNECTION_STATE'}} 

は、誰もが自分のコードを見て、私が間違っているかもしれないものを見ることができます:

subscription = rxBleDevice.establishConnection(context, true) 
      .subscribe(rxBleConnection -> { 
       rxBleConnection.readCharacteristic(UUID.fromString(UUID_LOG_COUNT)).doOnNext(Action1 -> Logger.d(Helper_Utils.reverseHex(HexString.bytesToHex(Action1)))); 
      }, throwable -> { 
       Logger.d("Error", throwable.getMessage()); 
      }); 

あなたはより多くの情報が必要な場合は、私が提供しようとしますそれ。

EDIT

私は2台の異なる携帯電話を使用しています 6.0.1二つのAndroid OnePlusモトGは、Android 6.0.1

を再生する私は無線LANの切り替えを複数回を試してみましたが、オンとオフブルートゥースいます。 私はこの例で読書を得ることができませんでした。

+0

お使いの携帯電話/ OSに関する情報をお知らせください。また、WiFiとBTの両方のアダプターの電源を入れ直した後で、再び起きるかどうかを確認することもできます。 –

+0

@s_noopy私は自分の答えを編集しました。私は読書を一度も受けたことがなく、何回試みるかは関係ありません。 – Glennmen

+0

Observable作業を取得するには、購読する必要があります。 –

答えて

0

status = 22で.doOnNextを変更

subscription = rxBleDevice.establishConnection(context, true) 
     .subscribe(rxBleConnection -> { 
      rxBleConnection.readCharacteristic(UUID.fromString(UUID_LOG_COUNT)) 
.subscribe(characteristicValue -> { 
          Logger.d(Helper_Utils.reverseHex(HexString.bytesToHex(characteristicValue))); 
         }); 
     }, throwable -> { 
      Logger.d("Error", throwable.getMessage()); 
     }); 

あなたの周辺機器を取り外すAndroidのOSに関連する問題です。それを防ぐためにコードから行うことはあまりありません。

特性値を読んでいないのは、あなたがそれを購読していないからです。 RxJavaプログラミング(または一般的にはリアクティブプログラミング)の最善のアプローチは、単一のサブスクリプションだけでフローを準備することです。これは、状態の量を最小限に抑えるためです。

あなたはこのように行うことができます:

Subscription s = rxBleDevice.establishConnection(true) // establish the connection 
    .flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(UUID.fromString(UUID_LOG_COUNT))) // when the connection is established start reading the characteristic 
    .take(1) // after the first value unsubscribe from the upstream to close the connection 
    .subscribe(// subscribe to read values 
    characteristicValue -> Logger.d(Helper_Utils.reverseHex(HexString.bytesToHex(characteristicValue))), // do your thing with the read value here 
    throwable -> Logger.d("Error", throwable.getMessage()) // log/show possible error here 
); 

.subscribe()の結果は、あなたが周辺を切断しますどのSubscription.unsubscribe()を呼び出すことでキャンセルすることができSubscriptionであることを覚えておいてください。

私のコードは、昨日リリースされたRxAndroidBle 1.2.0によって導入された新しいAPIを参照しています。

0

ありがとうございます。私の問題を見つけるためにs_noopyありがとうございます。

これは私の問題の解決策だった:私は.subscribe

関連する問題