rx-java - 如何使用 rxBleGattCallback.setNativeCallback(bluetoothGattCallback)?
问题描述
我有一个 rxBleConnection,我正在尝试将本机 BluetoothGattCallback 设置为 rxBleGattCallback 但它不起作用,因为我的 BluetoothGattCallback 没有检测到任何事件。我的代码是下一个,有人可以帮助我吗?
class MyRxBleCustomOperation: RxBleCustomOperation<Any> {
override fun asObservable(bluetoothGatt: BluetoothGatt?, rxBleGattCallback: RxBleGattCallback?,
scheduler: Scheduler?): Observable<Any> {
rxBleGattCallback?.setNativeCallback(bluetoothGattCallback)
return Observable.just("")
}
private val bluetoothGattCallback = object : BluetoothGattCallback() {
override fun onCharacteristicChanged(gatt: BluetoothGatt?, characteristic: BluetoothGattCharacteristic?) {
super.onCharacteristicChanged(gatt, characteristic)
Timber.e("SOME CHARACTERISTIC CHANGED") //Here It doesn't detect nothing
}
}
}
.............我从某个班级打来电话......
rxBleConnection.queue(myRxBleCustomOperation()).subscribe()
我希望检测到所有 onCharacteristicChanged 因为我必须连接所有收到的数据
解决方案
来自的Javadoc RxBleGattCallback.setNativeCallback()
:
操作终止后回调引用会自动释放。
您将Observable.just("")
在订阅后立即返回完成(终止)。这就是为什么您没有收到任何回调的原因,因为您的回调几乎立即被分离。
如果您需要连接从所有活动通知接收到的所有数据,您可以通过合并它们轻松完成:
val allNotificationsObs: Observable<ByteArray> =
Observable.merge( // still need to activate all wanted notifications
rxBleConnection.setupNotification(uuid0),
rxBleConnection.setupNotification(uuid1),
rxBleConnection.setupNotification(uuid2),
rxBleConnection.setupNotification(uuid3),
rxBleConnection.setupNotification(uuid4)
// ...
)
.flatMap { it }
推荐阅读
- java - 我的 Android Studio 项目中的运行时错误是什么?
- python - 从列表中选择值 - 如何提高效率
- r - r2d3中的动态变量选择
- javascript - 在 p5js 中获取图像的像素值
- kubernetes - 如何在 Kubernetes 上自定义 config.toml?
- react-native - 如何在 react-native 中设置 Onpress On Textinput
- google-maps - 角度 agm 核心地图圈单击未打开 agm 信息窗口
- python - 根据重复模式捕获整个重复字符串
- c# - Crystal Report CSV Generation
- angular - 使用材质主题颜色制作动画