问题标签 [rxandroidble]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
743 浏览

bluetooth-lowenergy - 如何在 GATT 错误的情况下重试 RxAndroidBLE 发现服务。

我正在使用 RxAndroidBLE 库来发现我的 GATT 服务器中的服务。它大部分时间都可以正常工作,但我经常收到 GATT 错误 133 (0x85) 并且它失败了。我想在一段时间内重试几次发现服务,比如 5 秒。这是我正在尝试的代码

它不起作用,看起来 retryWhen 没有被调用。它可能更多是 rxJava 问题,但我将非常感谢您对此的任何帮助。

0 投票
0 回答
426 浏览

android - 无法连接到 Android 7.1.2 上的 BLE 设备

我有一个 Android 应用程序,它使用 RxAndroidBLE 库连接到蓝牙设备(带有 RN4020 蓝牙模块的 PCB)。

在我的三星 Galaxy Tab SM-T310 (Android 6.0.1) 上运行良好。
在我的摩托罗拉 Moto G3 (Android 7.1.2) 上,它可以连接,但随后会立即断开连接并出现一些错误。

我这样连接:

在“receivedUUIDScanResult”方法中,我订阅了一些私有特征。

日志:

0 投票
1 回答
503 浏览

android - Android Ble 客户端应用架构

这更像是一个笼统的问题,而不是一个具体的问题。

基本上我正在开发一个与 Ble 外围设备通信的 Android 应用程序。我使用RxAndroidBle库处理 Ble 通信。至于一般模式,我决定尝试 Mosby MVI,但这并不重要。

到目前为止,我创建了 BluetoothManager 类,该类负责在 Ble 设备上执行所有操作。这个类是一个 Singleton(我知道它在 Android 上不推荐),我使用 Dagger 对其进行了限定,它只注入到那些应该执行一些 Ble 通信的交互器。此类返回带有一些 POJO 的 Observable,这些 POJO 在交互器中转换为 ViewState,然后移到 UI 的更高位置。按照Mosby MVI模式在演示者中订阅。

基本上感谢我将此 Ble 设备视为常规数据源,与某些改造服务或任何数据库相同。只要我执行原子操作,比如写入和读取一些单一特征,那完全没问题。

问题是当我需要启动某种可能需要很长时间的同步时,应该在后台完成,不应该绑定到 UI,但是在某些屏幕上用户应该能够看到进度。在这里,我开始考虑使用 Android 服务并将所有 Ble 通信逻辑放在那里,但是在我看来,使用 Android 服务会破坏任何逻辑分离的尝试,我找不到适合它的好方法。

第三种选择是提供同步服务并为绑定到 UI 的原子操作保留 BluetoothManager,但是我认为这很混乱,如果将所有 Ble 东西放在一个地方,我会很高兴。

我知道这很长,但一切都归结为一个问题 -> 在 Android 上与 Ble 设备通信以保持层分离并使其尽可能独立时,最好遵循的模式是什么。我找不到任何关于处理它的好文章,如果有的话,它们已经过时了,而不是使用 Rx 方法。如果它太笼统,我可以指定更多细节,但我更多的是寻找架构建议而不是代码片段。

0 投票
1 回答
146 浏览

java - RxAndroidBle 与 java 7

我正在尝试使用 RxAndroidBle 扫描设备。我发现的所有示例似乎都使用了 java lambda 表达式。我需要带有 android studio 的 java 8 才能使用 RxAndroidBle 库吗?如何在没有 lamda 表达式的情况下运行以下代码?

0 投票
1 回答
119 浏览

bluetooth-lowenergy - 应用程序无法从 ble 设备捕获每个扫描响应

我正在开发一个 BLE android 应用程序,我在其中使用RxAndroidBLe进行 BLE 通信。

除了应用程序没有接收到 BLE 设备广播的每个扫描响应的一个问题外,一切工作正常(我不确定这是否是一个问题)。BLE 设备设置为每 1 秒广播一次。它以循环方式在所有三个通道 37、38、39 上广播扫描响应。该应用程序打算连续扫描,直到应用程序关闭。但我观察到应用程序没有收到所有扫描响应。表示它没有每 1 秒收到来自设备的扫描响应。有时会有 2.3 秒或更长的时间间隔。我想知道是否有任何解决方案来克服这个问题或者这是一个有效的行为?

任何建议将不胜感激。提前致谢。

0 投票
1 回答
99 浏览

rx-java - 带有 PublishSubject 的 RxBleConnection 不释放连接

我的应用程序实际上有一个 BLE 操作队列来与我的外围设备一起执行。每个操作都从建立与外围设备的连接开始,该外围设备返回Observable<RxBleConnection>. 队列中的第一项启动连接,后续操作只需接收 this (shared) 即可RxBleConnection

简而言之,队列通过以下方式执行:

如果无法建立连接,或者在一次操作期间断开连接,则剩余的排队操作每次都会重试,尝试重新建立连接。

我决定修改行为,以便一旦连接无效,排队的操作应该总是接收现在无效的RxBleConnection,而不是重新建立新的连接。重试逻辑仍然执行,但在这些情况下会立即失败 --- 操作失败还有其他原因,与连接无关。

为了产生这种行为,我PublishSubject直接在Observable<RxBleConnection>. 这个主题只是简单地代表了原来的RxBleConnection——见下面的代码。如果连接达到错误状态,则后续订阅该主题将收到错误;否则,返回共享连接。这正是我想要的行为,并且在发生错误时它似乎按设计工作;但是,当一切都成功时,我现在遇到了问题。

在更改之前,一旦队列中的所有操作都被消费完,连接就会自动释放。但是,添加 后PublishSubject,操作成功,但连接保持打开状态。使用调试语句,我验证了主题的onUnsubscribeonTerminate从未被调用。原来的RxBleConnection最终超时---并且它onUnsubscribe确实onTerminate被调用了。

想知道我做错了什么导致应用程序保持与外围设备的连接。

0 投票
1 回答
599 浏览

android - RxAndroidBle 连接超时

我正在连接到发现的设备并定期读取 RSSI。我需要确切地知道连接何时丢失。有什么方法可以指定连接超时,之后我会收到RxBleConnectionState.DISCONNECTED吗?rxBleConnection.readRssi()现在,即使连接的设备已关闭,我仍然会收到 rssi 。

我应该使用 Proximity 蓝牙配置文件中的 Link Loss 服务而不是连接超时吗?

我的代码:

0 投票
1 回答
1406 浏览

android - BleGattException 状态返回 133 (onClientConnectionState() - status=133)

当我尝试打开通知后连接ble,但经常返回BleGattException status = 133,有时它有时不会。

这是我的代码:

connectFail 返回 BleGattException 状态 = 133

这是我评论后面的打印日志//:</p>

mConnectingDevice.建立连接(假)

连接状态 133

连接失败 gatt 已关闭

继续尝试连接:

再次连接失败!有解决办法吗?不知道为什么连接状态是133,gatt已经关闭了!现在这种状态经常出现,帮帮我谢谢。

BleGattException 状态返回 133

0 投票
0 回答
362 浏览

android - 大数据量的 RxAndroidBle 读取操作

我正在使用 RxAndroidBle 库将值从我的 BLE 设备读取到我的 android 应用程序。应用程序在 BLE 外围设备上进行多次读取,如下面的代码所示。

}

现在这一切工作正常,但偶尔如果从 BLE 设备读取的数据超过 600 字节,那么我会在读取完整数据之前调用 Subscribe(bytes->) ,之后我会调用 takeUntil 来检查它字符串末尾的特殊字符并终止,丢失第二块中的所有数据。看起来 RxAndrodiBLE 库维护一个内部缓冲区并继续写入该缓冲区中的所有数据,一旦缓冲区已满,订阅 observable 就会被调用。当读取的数据大小大于缓冲区大小时,这会导致问题。我们如何处理它,这样我们就不会以块的形式获取数据。我们还可以增加缓冲区的大小,以便在调用订阅之前将接收到的所有数据存储在那里。

0 投票
1 回答
1516 浏览

rxandroidble - 如何在 RxAndroidBle 中接收所有通知

我正在尝试使用在 Android 手机上运行的 rxBleAndroid 以及使用 Android Things 的 Raspberry Pi 与 BLE 数据记录器/传感器进行通信。

但是,我目前遇到一个问题,我的应用程序从未收到最多大约 5 个第一条通知。

我已验证 BLE 设备实际上已成功发送所有预期的通知。我已经通过 nRF Connect 应用程序做到了这一点,并且一切都按预期工作。

当我通过 nRF Connect 应用程序执行此操作时,我采取的步骤如下:

  1. 写入密码特征以解锁设备
  2. 写入模式特征以将设备置于正确模式
  3. 订阅通知(通知立即开始工作)

通过 RxAndroidBle 执行此操作时,我怀疑可能是 .subscribe() 的设置速度不够快。

是否有某种方法可以执行 setupNotification(),然后编写特征来告诉设备开始发送通知?

这是我当前的代码: