2017-05-11 33 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

相关问题