Как получить доступ для установления соединения Bluetooth с RxAndroidBle? - PullRequest
0 голосов
/ 30 ноября 2018

Я использую RxAndroidBle в проекте, и у меня есть следующий вариант использования:

  • Компонент третьей части также использует RxAndroidBle для установления соединения и взаимодействия с определенным набором BleУслуги ГАТТ.Но он скрывает поток 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;

}

...