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

android - Rxandroidble-scanBleDevices(UUID...filters) 方法不支持两种类型的服务

我遇到了一个问题,即 scanBleDevices(UUID...filters) 方法无法支持发现具有不同 UUIDServices 的双重设备。

我猜 args 之间的关系是 AND,但不是 OR。但是我怎样才能得到具有不同 UUIDService 的双重设备呢?

那里的代码是我想发现带有 uuid 的设备00001801-0000-1000-8000-00805F9B34FB和另一个带有 uuid的设备6E400001-B5A3-F393-E0A9-E50E24DCCA9E,但我总是无法通过代码获得结果。那么,我该如何解决这个问题呢?

0 投票
2 回答
948 浏览

android - 如何使用 rxandroidble 禁用通知?

我目前正在尝试使用 rxandroidble 来替换我们其中一款应用的 Android 原生 BLE API。

如何禁用通知?我可以使用示例代码启用它,这个:

但是在我的产品中,我有一个用例,我必须按需禁用/启用通知。

另外,我尝试直接取消订阅/重新连接而不是禁用/启用通知,但取消订阅命令显然从未执行,我的假设是因为我的吞吐量很高(我的设备以 300 - 400Hz 通知),这是否合理?

(我知道 BLE 不是最适合高吞吐量的技术,但它在这里用于研发目的 :))

谢谢你的帮助!

0 投票
1 回答
327 浏览

java - 持续订阅和取消订阅 Observable 以进行 BLE 扫描

我想实现一个功能,其中 BLE 扫描被激活 10 秒,然后中断 10 秒,并在视图处于活动状态时重复。

我正在使用RxAndroidBle它包装 Android BLE API 以实现反应性。我有一个方法scanForRange(getConnectAddress());,它使用一个Observable<RxBleScanResult>和一些过滤器和一个映射来返回一个简单的Observable<Integer>. 要开始扫描,必须简单地订阅这个 observable,然后取消订阅以停止扫描。

我的第一个想法是使用Observable.interval()如下所示:

然后我会在我的onPause(). 现在这不起作用,因为一旦发出第一个间隔,就会订阅扫描并将连续发出结果(而不是每 10 秒开始/停止)。

那么实现此功能的最佳方法是什么?我想我可能可以混合使用 Observables 和 Handlers 来破解它,但这似乎是错误的。

0 投票
2 回答
607 浏览

android - Emit an item one at a time, interact with it until a condition is met, then continue for next item

I have a list of BLE devices, and am using RxJava to interact with them. I need to emit an item from the list, write a characteristic to it repeatedly until X happens, and then proceed to the next item in the list.

Current code:

where .connectForPolicing() looks like:

This code seems to immediately emit all the items in the list, and therefore will connect and buzz all items at the same time. How can I emit items one at a time so that I may interact with them?

The pseudocode would be something like:

0 投票
1 回答
339 浏览

bluetooth-lowenergy - Android BLE iBeacon 广告包大于预期

考虑到设备的 RSSI 和校准的传输功率,我正在尝试获得 BLE 设备的估计范围。

校准的 txPower 应该作为外围 iBeacon 广告包中的最后一个字节发出。根据我找到的文档,这些数据包的长度应为 30 个字节。

但是,返回byte[]的数据包长度为 62 字节。因此,广告数据的格式是未知的。

为什么会发生这种情况,有没有办法破译 62 字节数据包的格式?

0 投票
0 回答
503 浏览

android - OnErrorNotImplementedException 仍然以包含错误处理的方式被调用

我正在执行对 BLE 特性的写入,其中对于这些特定设备,如果外围设备仍处于锁定状态,则某些特性是不可写入的。

如果在设备仍处于锁定状态时调用它,我只想提供一个视觉通知,而不是抛出异常。

这是代码的第一部分,它来自我为此应用程序编写的自定义库:

这是使用前一个的方法:

这以前只是一个Action1,但我改为aSubscriber以清楚地显示onError()已实施。

我添加了一堆额外的运算符 ( onErrorReturn(), onErrorResumeNext()) 以防止出现异常。

为什么异常仍然通过?

编辑:堆栈跟踪:

0 投票
1 回答
1368 浏览

android - rxandroidble:BLE设备长时间断开连接:应用程序进入睡眠状态

我正在使用 rxandroidble 使用 autoconnect = true 来持续监控来自传感器的数据。该应用程序会不断扫描它之前连接的传感器。

即使手机没有连接电源,传感器的数据监控和扫描也应该持续一整夜。

如果传感器在晚上连接,应用程序将保持连接一整夜,即使它暂时断开连接。

但是,如果传感器在夜间断开 6 小时(因为我拔掉了传感器的电池),然后在早上重新连接传感器电池,手机似乎不会重新连接到传感器。

我每 8 秒不断扫描 Android 服务中的新传感器,但它不是 WakefulService,也不是由 WakefulIntent 启动的。应该是吗?

知道会发生什么吗?rxandroidble 是否设计为在这种情况下继续扫描传感器(ble 设备连接,超出范围 8 小时,然后回到范围内)?或者我是否需要在断开连接后手动尝试重新连接,然后 rxandroid 会不断尝试重新连接。

这是我的扫描码:

这是我的连接代码:

如果连接状态变为断开连接,我不会尝试手动重新连接;扫描或自动连接应该解决这个问题吧?

我已经在安卓电池设置中关闭了应用程序的“应用程序优化”,也就是打盹模式,但我不知道这是否有任何作用。

编辑1:这是我的日志......我们第一次连接正常,然后我们尝试连接,然后我们立即断开连接:

谢谢!

第二次编辑:

消费代码

private void RxBleOnConnectionReceived(RxBleDeviceServices services) { // 发现服务

0 投票
1 回答
53 浏览

rx-java - Rewriting connection method to utilize Rx

I'm rewriting a method in a library to utilize Rx. The below code example is the original method.

#xA;

My first go was to return a Subscription instead of saving it to mEstablishedConnection. This would allow the user to unsubscribe to trigger a disconnect:

#xA;

The issue with the above is that I can not properly propagate errors back to the caller, which would be nice to do. How can I rewrite this method to make it reactive, letting the caller receive errors, and not just return an RxBleConnection, which is a 3rd party class?

0 投票
2 回答
1369 浏览

android - 使用 RxAndroidBle,我如何订阅响应写入特性?

我要连接的 BLE 设备在其 GATT 特性之一上发出字节,以响应对该特性的写入。客户端应该启用有关该特征的通知,并解释该特征的更改字节。(我正在控制的行为是打开附近无线网络的扫描服务,然后监听服务输出。)

我正在使用 RxAndroidBle 并遵循示例。我有一个活动连接 Observable。我要观察的特征有一个名为AP_SCAN_DATA. 它应该0xFE响应接收到书面的0xFF.

如何调用setupNotification并在其上设置 Observer 以捕获发出byte[]的 s,然后将值写入特征,以便我可以捕获响应?

到目前为止我最大的努力:

0 投票
1 回答
54 浏览

rx-java - 在不使用传统监听器的情况下通知错误事件

我有一个相当复杂的 Rx 代码链,用于执行许多操作。本质上,当启动时,Observable 开始发出项目列表。对于每个项目,都会建立一个连接(这些项目是 BLE 设备)并写入一个特性。

此特性每 10 秒重写一次,直到发生错误(例如拔出电池)。之后,原始列表中的下一个项目被连接到,依此类推。

这是大多数动作发生的地方:

这里有几个问题。可以看到,一个传统的监听器传入这个方法,这个监听器在onErrorResumeNext. 此侦听器用于从 Activity 中的 RecyclerView 中删除项目,但这并不重要。问题是,以这种方式使用监听器有点像 Rx 的反模式。以下是其余相关代码,包括调用上述示例的代码:

包括监听器的实现。问题是,我怎样才能执行与听众使用 Rx 所做的等效的操作?