问题标签 [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 回答
385 浏览

android - 如何让 Android Activity 等待异步进程完成

使用RxAndroidBle进行蓝牙 LE 连接。它可以扫描和识别具有给定服务 UUID 的设备(并将它们添加到向量中)。但是当我在 while 循环中添加一个自旋锁(实际上是一个AtomicBoolean)来检测扫描何时完成时,它似乎不再找到设备。

我怀疑可能发生了几件事:

  1. 主 UI 线程已向前推进并试图显示已发现设备的空向量。如果是这种情况,我怎样才能让它等待设备扫描完成而不会使系统陷入困境?我认为 RxJava 平台消除了这个AsyncTask选项。
  2. 测试扫描完成的while()循环可能会消耗过多的 CPU 周期,从而阻止扫描成功。我怎样才能解决这个问题?
0 投票
1 回答
541 浏览

android - 有时不会在使用 RxAndroidBle 的 notify/write observable 中调用通知

我目前正在使用 RxAndroidBle 将固件写入蓝牙设备。它的工作方式我必须在一个 WRITE_CHARACTERISTIC_UUID 上将数据块(每块 580 字节)发送到蓝牙设备,然后在 LISTEN_CHARACTERISTIC_UUID 上收听结果,以检查蓝牙设备是否已成功确认该块。

理想情况下,我希望这个写入和通知链是一个操作,所以我使用来自类似堆栈溢出问题的代码(https://stackoverflow.com/a/41140523/734385):

问题是这仅在前几次有效,之后写入操作成功但我从未收到通知。这是停止前最后几个块的日志:

正如你在最后看到的那样,我没有得到

在最后。

注意:writeData 在 Scheduler.io() 线程中运行,我正在使用库中的最新主提交(https://github.com/Polidea/RxAndroidBle/commit/37ecef5c270c792bcb9193f6dd76b8711642e0ff)(因为我需要新的 LongWriteBuilder )

有趣的是,如果我启动一个额外的“虚拟”通知 observable,它什么都不做:

上述可观察的作品,我收到每一个通知。

我怀疑我在设置通知时做错了什么,或者我错过了某个地方的延迟。

0 投票
1 回答
65 浏览

rx-android - 序列化 RxAndroidBle 类的问题

我的应用程序尝试将使用 RxAndroidBle 类的相当复杂的对象从一个 Android 活动传递到另一个活动,方法是将其添加到 Intent 作为 Serializable extra。但是我遇到了崩溃,显然是由于这些类的序列化问题。

有什么解决办法吗?

0 投票
2 回答
702 浏览

android - 写入和通知特性上的 RxAndroidBle 错误

嗨,我正在服务中运行 RxAndroidBle。我将其设置为自动连接,因为设备每 5 分钟唤醒一次并尝试将数据发送到配对设备。我还设置了通知以获取数据。它可以工作,但每次断开连接时,我都会收到通知错误和写入错误。

0 投票
0 回答
552 浏览

android - 扫描自动停止:BluetoothAdapter: stopLeScan()

BluetoothManager 是一个负责与 ble 设备交互的类。
它作为单例注入 RxBleClient 并开始扫描片段/服务的启动方法。有时扫描会自动停止,有时几秒钟后我找不到原因。

问题是设备仍在广播它的包,但我的应用程序无法接收它,因为 BluetoothAdapter 已经停止了扫描。

以下是在服务中扫描的日志:

这是蓝牙管理器:

0 投票
1 回答
348 浏览

android - 如何使用 RxAndroidBLE 库利用 Android BLE 绑定功能?

我在 RxAndroidBLE 示例代码/描述中没有找到任何相关内容。在 vanilla Android BLE API 中,我可以轻松地使用 BluetoothDevice.createBond() 方法,但我完全不知道如何使用 RxAndroidBLE 来做同样的事情。

0 投票
2 回答
4027 浏览

android - BxAndroidBle 无法读取设备,状态=22

我在读取 Ble 设备和使用 RxAndroidBle 库时遇到问题。

我不断收到此错误:

谁能看看我的代码,看看我可能做错了什么:

如果您需要更多信息,我会尽力提供。

编辑

我用过 2 部不同的手机: OnePlus 两部 Android 6.0.1 Moto G Play Android 6.0.1

我已经尝试过多次打开和关闭 wifi 和蓝牙。我从来没有读过这个例子。

0 投票
1 回答
762 浏览

android - 正确使用带有 RxAndroidBLE 的 createNewLongWriteBuilder

我有一个在虚拟串行端口上一次只能接受 20 个字节的设备(使用 BLE)。如果我没记错的话, createNewLongWriteBuilder 似乎是完美的方法。

这是我的尝试:

实际结果:设备没有收到任何数据,但日志显示:

D/RxBle#Radio: QUEUED RxBleRadioOperationCharacteristicLongWrite(107353908) D/RxBle#Radio: STARTED RxBleRadioOperationCharacteristicLongWrite(107353908) I/BLE 控制器:数据已写入!

D/RxBle#Radio:完成 RxBleRadioOperationCharacteristicLongWrite(107353908)

2017 年 3 月 30 日更新:

我最初的理解是不正确的,并且有很多问题。我发送的是订阅而不是 Observable。

s_noopy 指出:

WriteOperationAckStrategy 实际上是 ? Observable.repeatWhen() 运算符。过滤应该发生在 WOAS 内部,以便在准备好时触发重复。`

现在的情况:

我需要等待我的设备清除 TX 标志,然后才能发送下一批。为此,我需要实现setWriteOperationAckStrategy,但我需要在发送下一批之前读取 TX 标志以查看它是否清晰。

我的尝试:

2017 年 7 月 30 日更新:

修改了 s_noopy 的代码,现在我有了:

现在的情况:

我试图从使用 rxBleConnection 转换为使用 connectionObservable。看起来好像第一批写入成功,但即使订阅函数两次都返回成功写入的字节数组,蓝牙设备也只能看到第一批

日志

2017 年 7 月 31 日更新:

更新以使以前的代码同步

不幸的是仍然无法正常工作,以下是相关日志:

0 投票
1 回答
158 浏览

android - 退订问题

我正在做一个应用程序,它使用 RxAndroidBle 作为呼吸机的遥控器。我有一个问题,unsubscribe因为当我使用

之后我使用subscription.unsubscribe();writeCharacteristics 不起作用,因为unsubscribe总是首先运行,并且在发送数据之前连接断开。

我需要的是:

  • 当我点击按钮时,我想连接到呼吸机
  • 然后发送所有值
  • 然后断开连接。
  • 如果我重复这个过程,它需要一遍又一遍地做同样的事情。

有人可以帮我一些想法吗?我尝试使用.delay(1000, Time.MILISECONDS)并且它有效,但是将信息发送到呼吸机需要很长时间。

这是我的代码:

0 投票
1 回答
471 浏览

android - RxAndroidBle WRITE_TYPE_DEFAULT 或 WRITE_TYPE_NO_RESPONSE

我想知道 RxAndroidBle 库在写确认方面使用哪种策略:WRITE_TYPE_DEFAULTWRITE_TYPE_NO_RESPONSE

此外,我是否希望设置(或查询)此设置,如何在 RxAndroidBle 中执行此操作?

我正在从 RxAndroidBle v1.1 -> v1.2 移植应用程序,所以我很好奇上述问题是否基于这些版本有任何差异。