BxAndroidBleはデバイスを読み取ることができません、ステータス= 22

Bleデバイスを読んだりRxAndroidBleライブラリを使用したりするのに問題があります。

私はこのエラーを受け続けます:

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());
            });

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

編集

私は2つの異なる電話を使用しました: OnePlus Two Android 6.0.1 モトGプレイアンドロイド6.0.1

私は無線LANとブルートゥースのオンとオフを何度も切り替えてみました。 この例では一度も読むことができませんでした。

0
どの電話/ OSを使用しているかについての情報を教えてください。 WiFiとBTアダプタの両方の電源を入れなおした後に、再度発生するかどうかも確認できます。
追加された 著者 Dariusz Seweryn,
連絡あった? RxBleLog.setLogLevel(RxBleLog.VERBOSE)を設定して、アプリからのログを元の投稿に貼り付けることはできますか。
追加された 著者 Dariusz Seweryn,
連絡あった? RxBleLog.setLogLevel(RxBleLog.VERBOSE)を設定して、アプリからのログを元の投稿に貼り付けることはできますか。
追加された 著者 Dariusz Seweryn,
RxBleDevice.establishConnection()を購読しているだけです。その後、 RxBleConnection.readCharacteristic()による読み取りを作成しましたが、まだ購読していません。 status == 22 が依然として問題であるかどうかを明確にしてもらえますか?
追加された 著者 Dariusz Seweryn,
RxBleDevice.establishConnection()を購読しているだけです。その後、 RxBleConnection.readCharacteristic()による読み取りを作成しましたが、まだ購読していません。 status == 22 が依然として問題であるかどうかを明確にしてもらえますか?
追加された 著者 Dariusz Seweryn,
Observableを機能させるには、それを購読する必要があります。
追加された 著者 Dariusz Seweryn,
Observableを機能させるには、それを購読する必要があります。
追加された 著者 Dariusz Seweryn,
Observableを機能させるには、それを購読する必要があります。
追加された 著者 Dariusz Seweryn,
どの電話/ OSを使用しているかについての情報を教えてください。 WiFiとBTアダプタの両方の電源を入れなおした後に、再度発生するかどうかも確認できます。
追加された 著者 Dariusz Seweryn,
どの電話/ OSを使用しているかについての情報を教えてください。 WiFiとBTアダプタの両方の電源を入れなおした後に、再度発生するかどうかも確認できます。
追加された 著者 Dariusz Seweryn,
私は自分の答えを編集しました。私は読書をしたことがないので、何回試してもかまいません。
追加された 著者 Glennmen,
@s_noopy私はRxJavaのエキスパートではありませんが、購読していないのですか。例を挙げてください。
追加された 著者 Glennmen,
@s_noopy私はRxJavaのエキスパートではありませんが、購読していないのですか。例を挙げてください。
追加された 著者 Glennmen,
@s_noopy私はRxJavaのエキスパートではありませんが、購読していないのですか。例を挙げてください。
追加された 著者 Glennmen,
私は自分の答えを編集しました。私は読書をしたことがないので、何回試してもかまいません。
追加された 著者 Glennmen,
私は自分の答えを編集しました。私は読書をしたことがないので、何回試してもかまいません。
追加された 著者 Glennmen,
@s_noopy私に正しい方向を向けるようにお願いします、あなたがここに答えを投稿するなら、私はそれを承認済みとマークします。
追加された 著者 Glennmen,

6 答え

status = 22 is a problem related to Android OS disconnecting your peripheral. There is not much you can do from the code to prevent it.

特性値を読んでいないのは - あなたがそれを購読していないからです。 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 であることを忘れないでください。これは Subscription.unsubscribe()を呼び出して周辺機器を切断することでキャンセルできます。

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

0
追加された

status = 22 is a problem related to Android OS disconnecting your peripheral. There is not much you can do from the code to prevent it.

特性値を読んでいないのは - あなたがそれを購読していないからです。 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 であることを忘れないでください。これは Subscription.unsubscribe()を呼び出して周辺機器を切断することでキャンセルできます。

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

0
追加された

status = 22 is a problem related to Android OS disconnecting your peripheral. There is not much you can do from the code to prevent it.

特性値を読んでいないのは - あなたがそれを購読していないからです。 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 であることを忘れないでください。これは Subscription.unsubscribe()を呼び出して周辺機器を切断することでキャンセルできます。

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

0
追加された

私の問題を見つけてくれてありがとうs_noopy。

これは私の問題の解決策でした:

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());
        });

.subscribeで.doOnNextを変更しました

0
追加された

私の問題を見つけてくれてありがとうs_noopy。

これは私の問題の解決策でした:

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());
        });

.subscribeで.doOnNextを変更しました

0
追加された

私の問題を見つけてくれてありがとうs_noopy。

これは私の問題の解決策でした:

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());
        });

.subscribeで.doOnNextを変更しました

0
追加された