1

現在、アプリの 1 つの Android のネイティブ BLE API を置き換えるために、rxandroidble を使用しようとしています。

通知を無効にする方法は? 次のサンプル コードで有効にできます。

device.establishConnection(context, false)
.flatMap(rxBleConnection -> rxBleConnection.setupNotification(characteristicUuid)) 
.doOnNext(notificationObservable -> { // OK }) 
.flatMap(notificationObservable -> notificationObservable)     
.subscribe(bytes -> { // OK });

しかし、私の製品には、オンデマンドで通知を無効/有効にする必要があるユースケースがあります。

さらに、通知を無効/有効にする代わりに、直接購読解除/再接続しようとしましたが、購読解除コマンドは明らかに実行されません。私の仮説は、スループットが高いためです (デバイスは 300 - 400Hz で通知します)、それはもっともらしいですか?

(BLE が高スループットに最適なテクノロジではないことはわかっていますが、ここでは研究開発目的です:))

ご協力いただきありがとうございます!

4

2 に答える 2

1

通知を有効にすると、ObservablefromRxBleConnection.setupNotification()がサブスクライブされるたびに発生します。通知を無効にするには、上記のサブスクリプションを解除する必要があります。

コード化する方法はいくつかあります。それらの1つは次のとおりです。

    final RxBleDevice rxBleDevice = // your RxBleDevice
    final Observable<RxBleConnection> sharedConnectionObservable = rxBleDevice.establishConnection(this, false).share();

    final Observable<Boolean> firstNotificationStateObservable = // an observable that will emit true when notification should be enabled and false when disabled
    final UUID firstNotificationUuid = // first of the needed UUIDs to enable / disable
    final Subscription subscription = firstNotificationStateObservable
            .distinctUntilChanged() // to be sure that we won't get more than one enable commands
            .filter(enabled -> enabled) // whenever it will emit true
            .flatMap(enabled -> sharedConnectionObservable // we take the shared connection
                    .flatMap(rxBleConnection -> rxBleConnection.setupNotification(firstNotificationUuid)) // enable the notification
                    .flatMap(notificationObservable -> notificationObservable) // and take the bytes
                    .takeUntil(firstNotificationStateObservable.filter(enabled1 -> !enabled1)) // and we are subscribing to this Observable until we want to disable - note that only the observable from sharedConnectionObservable will be unsubscribed
            )
            .subscribe(
                    notificationBytes -> { /* handle the bytes */ },
                    throwable -> { /* handle exception */ }
            );

上記の例では、最後のサブスクリプションsharedConnectionObservableが終了するたびに接続が閉じられることに注意してください。

さまざまな特性を有効/無効にするには、上記のコードをコピーして貼り付け、異なるObservable<Boolean>入力を有効/無効にすることができますUUID

于 2016-11-08T12:03:06.200 に答える