- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用在 Android 手机和使用 Android Things 的 Raspberry Pi 上运行的 rxBleAndroid 与 BLE 数据记录器/传感器进行通信。
但是,我目前遇到了一个问题,我的应用程序从未收到最多大约 5 个通知。
我已经验证 BLE 设备实际上已成功发送所有预期的通知。我已经通过 nRF Connect 应用程序做到了这一点,一切都按预期进行。
当我通过 nRF Connect 应用程序执行此操作时,这些是我采取的步骤:
rxBleClient = RxBleClient.create(this);
RxBleDevice device = rxBleClient.getBleDevice(mac_address);
device.establishConnection(false)
.flatMap(rxBleConnection -> rxBleConnection.writeCharacteristic(pword_uuid, pword)
.flatMap(ignored1 -> rxBleConnection.writeCharacteristic(mode_uuid, mode))
.flatMap(ignored2 -> rxBleConnection.setupNotification(log_uuid))
)
.flatMap(notificationObservable -> notificationObservable)
.subscribe(
bytes -> {
System.out.println(">>> data from device " + bytesToHex(bytes));
},
throwable -> {
System.out.println("error");
System.out.println(throwable);
});
最佳答案
可以通过 BLE 执行的大多数操作都是异步的,需要一些时间才能完成。设置通知也不异常(exception)——它是一个两步程序:
Is there maybe some way to do setupNotification(), and then write the characteristics to tell the device to start sending notifications?
device.establishConnection(false) // establish the connection
.flatMap(rxBleConnection -> rxBleConnection.setupNotification(log_uuid) // once the connection is available setup the notification
.flatMap(logDataObservable -> Observable.merge( // when the notification is setup start doing three things at once
rxBleConnection.writeCharacteristic(pword_uuid, pword).ignoreElements(), // writing the `pword` but ignore the result so the output of this .merge() will contain only log data
rxBleConnection.writeCharacteristic(mode_uuid, mode).ignoreElements(), // same as the line above but for `mode`
logDataObservable // observing the log data notifications
))
)
.subscribe(
bytes -> System.out.println(">>> data from device " + bytesToHex(bytes)),
throwable -> {
System.out.println("error");
System.out.println(throwable);
}
);
NotificationSetupMode.COMPAT
将这两个步骤分开。模式并写入
Client Characteristic Configuration Descriptor
稍后手动:
UUID clientCharacteristicConfigDescriptorUuid = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
device.establishConnection(false) // establish the connection
.flatMap(
RxBleConnection::discoverServices, // once the connection is available discover the services of the peripheral
(rxBleConnection, rxBleDeviceServices) -> // and when we have the connection and services
rxBleDeviceServices.getCharacteristic(log_uuid) // we get the log characteristic (on which we will setup the notification and write the descriptor)
.flatMap(logDataCharacteristic -> // once the log characteristic is retrieved
rxBleConnection.setupNotification(logDataCharacteristic, NotificationSetupMode.COMPAT) // we setup the notification on it in the COMPAT mode (without writing the CCC descriptor)
.flatMap(logDataObservable -> Observable.merge( // when the notification is setup start doing four things at once
rxBleConnection.writeCharacteristic(pword_uuid, pword).ignoreElements(), // writing the `pword` but ignore the result so the output of this .merge() will contain only log data
rxBleConnection.writeCharacteristic(mode_uuid, mode).ignoreElements(), // same as the line above but for `mode`
rxBleConnection.writeDescriptor(logDataCharacteristic.getDescriptor(clientCharacteristicConfigDescriptorUuid), BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE).ignoreElements(), // and we write the CCC descriptor manually
logDataObservable // observing the log data notifications
))
)
)
.flatMap(observable -> observable) // flatMap to get the raw byte[]
.subscribe(
bytes -> System.out.println(">>> data from device " + bytesToHex(bytes)),
throwable -> {
System.out.println("error");
System.out.println(throwable);
}
);
rxBleConnection.discoverServices()
如果我们知道日志特征服务
UUID
可以省略调用并使用
rxBleConnection.writeDescriptor(UUID serviceUuid, UUID characteristicUuid, UUID descriptorUuid
功能。
UUID clientCharacteristicConfigDescriptorUuid = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
device.establishConnection(false) // establish the connection
.flatMap(rxBleConnection -> rxBleConnection.setupNotification(log_uuid, NotificationSetupMode.COMPAT) // once the connection is available setup the notification w/o setting Client Characteristic Config Descriptor
.flatMap(logDataObservable -> Observable.merge( // when the notification is setup start doing three things at once
rxBleConnection.writeCharacteristic(pword_uuid, pword).ignoreElements(), // writing the `pword` but ignore the result so the output of this .merge() will contain only log data
rxBleConnection.writeCharacteristic(mode_uuid, mode).ignoreElements(), // same as the line above but for `mode`
rxBleConnection.writeDescriptor(log_service_uuid, log_uuid, clientCharacteristicConfigDescriptorUuid).ignoreElements(), // same as the above line but for writing the CCC descriptor
logDataObservable // observing the log data notifications
))
)
.subscribe(
bytes -> System.out.println(">>> data from device " + bytesToHex(bytes)),
throwable -> {
System.out.println("error");
System.out.println(throwable);
}
);
1.8.0
有一个新的
NotificationSetupMode.QUICK_SETUP
它首先打开内部通知,然后写入 CCC 描述符值。
rxBleConnection.setupNotification(log_uuid, NotificationSetupMode.QUICK_SETUP)
Observable<byte[]>
在写入描述符之前发出,允许从头开始观察通知(如果开始写入描述符)关于rxandroidble - 如何在 RxAndroidBle 中接收所有通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46192575/
我正在尝试使用在 Android 手机和使用 Android Things 的 Raspberry Pi 上运行的 rxBleAndroid 与 BLE 数据记录器/传感器进行通信。 但是,我目前遇到
我说英语有点抱歉。我需要你的帮助,因为我投入了很多时间,但我无法完成最后一个细节:_( 我必须将带有蓝牙 LE 的手机连接到继电器,才能打开或关闭门。提供原生蓝牙和 socket ,但没有办法做任何有
我是 RxJava 的新手。我现在尝试 RxAndroidBle 并将其与 BLE 的 Android API 实现进行比较。我的外围设备一次发送大量通知(512b block 中大约 30kB)。在
我正在使用 RxAndroidBle 库: 此代码按预期正常工作,单击 UI 上的“连接”按钮后,它建立了连接。 当我想要在设备返回范围内时自动连接到设备时出现问题。我不想再次点击“连接”按钮。 是否
我正在使用很棒的 rxandroidble 库进行 BLE 控制。 我保持 Activity 之间的联系。在开始扫描之前,我想先断开所有连接的设备。如果有很多连接,有时它不起作用。这是我正在使用的解决
我正在连接到一个已发现的设备并定期读取 RSSI。我需要确切知道连接何时丢失。有什么方法可以指定连接超时,之后我将收到 RxBleConnectionState.DISCONNECTED?现在,即使连
我正在使用 Polidea's RxAndroidBle library与我的 Android 应用程序中的设备通信。 我是响应式编程的新手,所以我无法弄清楚如何执行以下操作: 在一个特征(特征 A)
我需要帮助。当我使用 rxandroidble 时如何设置扫描超时,例如 10 秒。 scanDisposable = rxBleClient.scanBleDevices(
我目前正在尝试使用 rxandroidble 来替换我们其中一款应用的 Android 原生 BLE API。 如何禁用通知?我可以使用示例代码启用它,这个: device.establishConn
我是 Rx 编程的新手。我现在正在尝试使用 RxAndroidBle 来发现 BLE 设备的服务并从设备中读取一些特征。 我可以用 device.establishConnection(false)
我正在连接的 BLE 设备在其 GATT 特征之一上发出字节以响应对特征的写入。客户端应该启用该特征的通知,并解释该特征的更改字节。 (我正在控制的行为是打开附近无线网络的扫描服务,然后监听服务输出。
我在设置多个特征的通知时遇到问题。我查看了文档,发现许多示例仅涵盖非常细化的情况。 我的用例如下:1.扫描设备2. 用户选择要连接的设备(连接持续到应用程序关闭)3.订阅多种特性的通知4. 一次读/写
我正在尝试使用 RxAndroidBle 设置通知,但是当与外围设备的连接丢失时,我需要重新创建我设置的通知。我正在创建这样的通知: connectionObservable
我目前正在开发一个 xplattform Android/iOS 应用程序并评估使用 RxBluetoothKit 的 iOS 设备是否可以与运行 RxAndroidBle 的 Android 设备通
我目前正在使用 RxAndroidBle 将固件写入蓝牙设备。它的工作方式我必须将数据 block (每 block 580 字节)发送到一个 WRITE_CHARACTERISTIC_UUID 上的
我想知道 RxAndroidBle 库使用哪种策略来写确认:WRITE_TYPE_DEFAULT或 WRITE_TYPE_NO_RESPONSE ? 此外,如果我想设置(或查询)这个设置,在 RxAn
我正在尝试实现这个写入/通知处理示例 (Using RxAndroidBle, how do I subscribe to responses from writing to a characteri
在我的应用程序中,我使用的是 RxAndroidBLE 库。感谢很棒的图书馆。但我有一些问题。我正在尝试使用 连接到 BLE 设备 rxBleDevice.establishConnection(fa
当我未连接到我的设备时,我需要永久扫描ble广告以找到它并知道何时连接到它(特定产品)。此扫描是在前台服务中实现的,以匹配 8.0 的先决条件。 为了节省电量,我想定期扫描(同时遵守 Android
我正在使用 rxandroidble 使用 autoconnect = true 来持续监控来自传感器的数据。该应用会持续扫描它之前连接过的传感器。 即使手机未连接电源,传感器的数据监控和扫描也应持续
我是一名优秀的程序员,十分优秀!