2017-05-11 36 views
0

我是Rx編程的新手。我現在試圖使用RxAndroidBle來發現BLE設備的服務並從設備中讀取一些特性。如何使用RxAndroidBle結合服務發現和讀取特性

我可以使用

device.establishConnection(false) 
    .flatMap(rxBleConnection -> rxBleConnection.discoverServices()); 

找到設備服務

,並使用

device.establishConnection(false) 
    .flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(characteristicUUID)); 

閱讀想要的特性

但我想知道是否有可能將這兩項任務結合在一起?如果可能,我該怎麼做?

非常感謝您的提示和幫助!

回答

0

我看到你正在使用幫手方法readCharacteristic(UUID)。你完全可以跳過這個發現,圖書館會無縫地爲你做到。

當然,只需使用flatMap with zip或合併發佈即可。有很多方法,但這是一個基本和愚蠢的。

bleDevice 
    .establishConnection(false) 
    .flatMap(connection -> 
     Observable.zip(
      connection.readCharacteristic(UUID.randomUUID()).doOnNext(data -> doSomethingWithData(data)), 
      connection.discoverServices().doOnNext(services -> doSomethingWithServices(data)), 
      Pair::create 
     ) 
    ) 
     .subscribe(); 

這將是最好的,如果你可以做一些RxJava培訓。

+0

感謝您的回覆!但我也想發現服務,而不僅僅是讀取特性,有沒有什麼方法可以實現這一點? – wdxpz

+0

非常感謝您的幫助和建議!這有助於使其工作!我需要通過使用establishConnection對RxJava – wdxpz

+0

進行更多的培訓,然後發現服務,我發現有時候,它永遠不會去發現服務,並且訂閱者的onError onCompleted永遠不會發生,似乎連接沒有建立,並且過程將會停滯一段時間。我想知道是否有辦法限制建立連接的時間?非常感謝! – wdxpz

相關問題