如何获得Access与RxAndroidBle建立蓝牙连接?

时间:2018-11-30 09:32:16

标签: android bluetooth rx-java2 rxandroidble

我在项目中使用RxAndroidBle,并且具有以下用例:

  • 第三方组件还使用RxAndroidBle来建立连接并与一组定义的Ble GATT服务进行交互。但是它隐藏了RxBleConnection流。因此,应用程序的其他部分无法共享它()。

  • 应用程序的其他部分希望使用某些Ble GATT服务(与先例不同)。

如果我了解所有RxAndroidBle库都是无状态的,那么要由我来实现一个共享连接池以便在这两个组件之间共享RxAndroidBle连接流吗? 还是存在更简单的方法?

我做了什么:

包装RxBle和statefullWrapped中的一些对象:

例如RxBleDevice方法:

The establishConnection wrapped method is :  @Override
public Observable<RxBleConnection> establishConnection(boolean autoConnect) {
    return Observable.defer(()->
            pool.getConnectionFromPool(wrappedDevice.getMacAddress(),
                    wrappedDevice.establishConnection(autoConnect)
                            .doFinally(()-> pool.removeConnectionFromPool(wrappedDevice.getMacAddress()))
                            .compose(ReplayingShare.instance()))
    );

}

池中有一个并发映射,我们可以在其中检索Connection:

public Observable<RxBleConnection> getConnectionFromPool(String macAddress,Observable<RxBleConnection> persistentConnection){
    Observable<RxBleConnection> previousConnection = connectionPoolMap.putIfAbsent(macAddress,persistentConnection);
    if (previousConnection != null){ // The connection is already established
        return previousConnection;
    }
    return persistentConnection;

}

0 个答案:

没有答案