android - 如何获取访问权限以与 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()))
);
}
并且池有一个并发映射,我们可以在其中检索连接:
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;
}
解决方案
推荐阅读
- c - memcpy 函数定义中缓冲区的重叠是什么意思?
- python - 快捷方式中的目标:文件名、目录名或卷标语法不正确
- php - 如何在 laravel 中明智地制作本地化模块
- inheritance - 将动态内容呈现为继承的 Blazor 布局
- java - 如何使用 Java 在 Spring Boot 中使用枚举创建父子 Json 响应
- python - 如何过滤多索引数据框中的列(熊猫)
- javascript - 如何使用 Cypress 从 React-Calendar 获取 aria 标签
- c# - 仅使用 1 个请求检索 2 个 S3 对象及其内容 [C# AWSSDK]
- javascript - 如果语句不适用于空格键计数
- jquery - 来自 MySQL 的自动完成 jQuery 不起作用