首页 > 解决方案 > 如何获取访问权限以与 RxAndroidBle 建立蓝牙连接?

问题描述

我在一个项目中使用 RxAndroidBle,我有以下用例:

如果我理解的话,所有的 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()))
    );

}

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

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;

}

标签: androidbluetoothrx-java2rxandroidble

解决方案


推荐阅读