如何同时有效地读取两个 BLE 设备的温度?

2023-12-25

首先,我正在使用RxAndroidBLE http://polidea.github.io/RxAndroidBle/管理我的 BLE 连接的库。

我有两个我想同时读取两者的温度。例如,我想每 500 毫秒读取两个设备的温度,并将其在两个 TextView 中显示给用户。

我的应用程序目前已成功连接到两个 BLE 设备,如下所示:

@OnClick(R.id.connectButton1)
public void connectFirstSensorTag(Button b) {
    if (!isDeviceConnected(sensorTag1)) {
        connectionObservable1 = sensorTag1.establishConnection(getApplicationContext(), false).compose(new ConnectionSharingAdapter());
    }

    connectionObservable1.subscribe(new Subscriber<RxBleConnection>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {
            updateStatus(statusTextView1, "SensorTag not found");
        }

        @Override
        public void onNext(RxBleConnection rxBleConnection) {
            updateStatus(statusTextView1, "Connected");
            enableSensorTagTemperatureSensor(connectionObservable1);
        }
    });
}

@OnClick(R.id.connectButton2)
public void connectSecondSensorTag(Button b) {
    if (!isDeviceConnected(sensorTag2)) {
        connectionObservable2 = sensorTag2.establishConnection(getApplicationContext(), false).compose(new ConnectionSharingAdapter());
    }

    connectionObservable2.subscribe(new Subscriber<RxBleConnection>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {
            updateStatus(statusTextView2, "SensorTag not found");
        }

        @Override
        public void onNext(RxBleConnection rxBleConnection) {
            updateStatus(statusTextView2, "Connected");
            enableSensorTagTemperatureSensor(connectionObservable2);
        }
    });
}

现在我正在寻找每 500 毫秒同时读取两者温度的最佳方法。

现在,我正在做这样的事情:

connectionObservable1
                .flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(uuidFromShortCode("AA01")))
                .subscribe(bytes -> {

                    // first temperature was successfully read here

                    connectionObservable2
                            .flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(uuidFromShortCode("AA01")))
                            .subscribe(bytes -> {

                                // second temperature was successfully read here

                            }, error -> {
                                updateStatus(error.toString());
                            });
                }, error -> {
                    updateStatus(error.toString());
                });

该代码块位于每 500 毫秒调用一次的可运行对象内。

我觉得这是一种效率极低的方法。有人可以让我知道是否有更好的方法吗?


首先,您无法在 BLE 上进行真正的并行读取或任何其他操作,因为您只有一个无线电,并且操作需要按顺序进行。你能做的最好的事情就是尽快解雇他们。使用 RxAndroidBle,您可以为您管理序列化。

做你想做的事情的方式我是这样看的:

    RxBleDevice sensorTag0 = // your first SensorTag
    RxBleDevice sensorTag1 = // your second SensorTag
    UUID characteristicUuid = uuidFromShortCode("AA01");

    Subscription flowSubscription = Observable.combineLatest(
            sensorTag0.establishConnection(this, false), // establishing connections
            sensorTag1.establishConnection(this, false),
            Pair::new // merging them together
    )
            .flatMap(connections -> Observable
                    .interval(500, TimeUnit.MILLISECONDS) // every 500 ms
                    .flatMap(aLong -> Observable.combineLatest(
                            connections.first.readCharacteristic(characteristicUuid), // performing reads
                            connections.second.readCharacteristic(characteristicUuid),
                            Pair::new // and merging the results
                    )))
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                    readings -> {
                        updateUISensorTag0(readings.first); // updating the UI
                        updateUISensorTag1(readings.second);
                    },
                    throwable -> updateStatus(throwable.toString()) // or showing the error
            );

希望这对您有帮助。

此致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何同时有效地读取两个 BLE 设备的温度? 的相关文章

  • 在运行时绘制HSV圆

    我想在我的应用程序中有一个颜色选择器 如下所示 我尝试过逐像素填充位图 尝试使用画布drawArc 方法 这两种方式都不利于性能 有任何想法吗 它可能不完全是它应该的样子 与颜色 饱和度等有关 但是这是一些东西 http i1272 pho
  • 在 Android 上检测已接听的拨出电话

    我知道这个问题已经被问过很多次了 但没有答案 但我仍然希望有人终于解决了这个问题 问题 我有一台运行 Android 2 3 的未 root 设备 我需要创建一项服务 打电话 等待呼叫被应答 接听电话后挂断电话 有超时 和其他许多人一样 我
  • 在Android中打开浮动菜单(上下文菜单)?

    我创建了一个新菜单 名为 drmenu xml 当我按下菜单按钮时它可以正常工作 但是当用户按下按钮时我需要打开上下文菜单 下面的代码按钮只显示一个吐司 这是我的 xml 布局
  • 收到“提供的 API 密钥已过期”。使用 Places API 时出错

    我已经从 Google 控制台为 Places API 密钥生成了服务器密钥 但每当我访问该服务时 我都会收到 提供的 API 密钥已过期 错误 我已尝试重新生成密钥 但仍然出现相同的错误 我遇到了同样的问题 但终于解决了 Google 地
  • Android 服务 START_STICKY START_NOT_STICKY

    我需要让我的服务始终在后台运行 并使用 startService 函数启动我的服务 无论应用程序的状态如何 我都不想重新启动服务 这是我的观察 START STICKY gt 如果应用程序启动 则服务正在重新启动 当应用程序关闭时 服务也会
  • 通过 Intent 从文件管理器中选择文件

    我想做的 我想获取文件字符串形式的路径 我通过 Android 文件管理器选择该路径 我拥有的 Intent intent new Intent Intent ACTION GET CONTENT intent setType startA
  • 按钮上方带有文本的单选按钮

    我是 Android 新手 我需要在我的活动中添加单选按钮 但我需要将文本放在项目符号按钮的顶部 请提供任何帮助 我发现了以下内容 尽管我不明白 drawable in 选择器和 style Tab 样式是什么 顶部带有文本的单选按钮 ht
  • 不同风格的模块文件

    我正在尝试在同一个应用程序中实现播放服务和华为服务 但希望能够按风格配置使用哪一个 每种风格都使用自己的 applicationIdSuffix 因此 对于每种不同的风格 华为插件都会失败 我无法编译 我的应用程序模块包含agconnect
  • Eclipse Android 模拟器 - 键盘不工作

    我刚刚更新到最新的 SDK 版本 16 使用最新版本的 API 16 创建了新版本的 AVD 并且我的硬件键盘在模拟器上不再工作 甚至我的其他 avd 使用旧版本的 sdk 任何想法如何解决这一问题 您的 AVD 的 键盘支持 硬件属性是否
  • android device.getUuids 返回 null

    我正在尝试使用低功耗蓝牙 BLE 通过 Android 应用程序连接到 Arduino Uno 我正在 Android Studio 上进行开发 使用 Samsung Galaxy S4 和 Android 版本 5 0 1 进行测试我点击
  • 可下载字体例外

    我决定使用可下载字体 https developer android com guide topics ui look and feel downloadable fonts html在我的项目中 IS 按照指南中的建议实施了所有内容 当我
  • 应用程序运行时相对布局中的元素显示不同

    我有一个ListView在片段内创建 并且它有一个搜索过滤器 问题是 XML 布局在 android studio 中显示正常 但在模拟器或手机中运行时 它显示不同 与我对齐时不正确 并且当我单击SearchView它位于选项卡导航下方 谁
  • 测试应用内结算:“发布者无法购买此商品”

    我的应用程序似乎已准备好在我的设备上进行应用内购买程序的 现实生活 测试 但是 我在 Play 商店中收到 发布商无法购买此商品 的错误消息 现在 我应该如何测试这个 我不想通过仅用于测试的虚拟帐户重新安装手机来丢失手机的配置 在开发者控制
  • Android 报告“Error=Unable to find Instrumentation info for: ComponentInfo {}”

    stackoverflow 上有很多关于这个问题的主题 问题 例如错误 无法找到以下仪器信息 ComponentInfo https stackoverflow com q 21294945 513413 和其他网站 但使我的问题与其他网站
  • 尝试重新打开已关闭的对象:sqlitequery

    所以本质上我查询数据库两次 我不明白这个错误真正来自哪里 因为我没有在任何地方关闭数据库 返回错误的代码是这样运行的 我查了一下 刚刚看到一个像我这样的案例 BeaconHandler pullAllDB new BeaconHandler
  • 不幸的是 Project_Name 已停止

    我有一个简单的应用程序 您可以在文本视图中输入文本并按提交 它会在另一个活动中显示文本 然而 当我按下提交时 给我消息 不幸的是 发送已停止 我查看了SO上的其他线程 但是不幸的是 myfirstproject 在 java 中停止工作错误
  • Android 布局仅使一个视图将自己绘制为横向,但其他所有视图都使用纵向

    我的活动布局中的主要视图元素是 VideoView 我的视频被渲染为设备的横向分辨率 但视频中的所有内容都是横向的 因此仍然需要在设备处于纵向位置时观看 即使我必须将活动设置为android screenOrientation landsc
  • 如何在不下载子项的情况下从 Firebase 获取子项密钥?

    我有一个 Firebase 数据库 其中的节点 items 有很多子项 我想导入子项键的列表 由于每个子项都包含相当多我对此不感兴趣的数据 因此我想仅下载子项密钥 以最大程度地减少传输的数据量 为了便于说明 假设我有以下数据结构 然后我想获
  • 如何在 Android 的应用程序中使用 LDAP 身份验证?

    我想在我们的应用程序中添加 LDAP 身份验证 我在 Github 上搜索并找到了两个应用程序 但它们无法连接到服务器 通过ldap连接服务器的必要条件是什么 查看 UnboundID SDK 他们有一个适用于 Android 的套件 该应
  • Android 中用于过渡的自定义动画对象?

    我想用一些更奇特的东西来覆盖 Android 中的默认活动转换 我想做的事情不能用通常使用的 XML 集来完成 所以我不能使用overridePendingTransition因为它只接受对基于 XML 的动画资源的整数引用 我想做的是创建

随机推荐

  • 加载本机库/缺少方法时出现问题:java.library.path 中没有 ttJdbcCS

    我在将 timesten 客户端连接到服务器时遇到一个问题我得到的 SQL 异常粘贴在下面 加载本机库 缺少方法时出现问题 java library path 中没有 ttJdbcCS 我正在使用 MAC OS X 10 7 2 我的 ti
  • Python:使用 __import__ 时执行相对导入?

    以下是本次测试中的文件 main py app init py master py plugin init py p1 py p2 py 我们的想法是拥有一个具有插件功能的应用程序 新的 py 或 pyc 文件可以放入遵循我的 API 的插
  • 如何设计此解决方案来应对来自 Algoexpert.io 的不可施工变更挑战

    我正在解决 algoexpert io 编码挑战 但无法理解标题为 的问题之一的建议解决方案不可施工的改变 这是挑战问题 给定一个正整数数组 表示您的硬币的价值 拥有 编写一个返回最小变化量的函数 最低金额 您cannot创造 给定的硬币可
  • 符号作为变量的值为 void: dired-mode-map

    我正在尝试重新映射 dired 中的一些键 如下所示 add hook dired mode hook lambda require dired define key dired mode map kbd M o nil define ke
  • 获取 Android ProgressBar 中 secondaryProgress 的宽度

    我有一个带有文本的进度条 其中我已经重写了 onDraw 如下所示 Override protected synchronized void onDraw Canvas canvas super onDraw canvas Paint te
  • 两个数据库之间同步

    我有一个也有 Web 界面的应用程序 要求之一是即使没有可用的互联网连接也能够在该应用程序上运行 这些数据库之间是否需要同步 这些数据库应该有相当大的磁盘空间 如果有这样的需求应该怎么做呢 我应该使用什么数据库 目标操作系统是Windows
  • Highcharts 十字准线,轴上带有标签

    是否可以使 highcharts 十字准线在单独标签中的轴上显示实际值 API 中的常规十字线示例不会执行此操作 如果我设置 tooltip crosshairs true true 它没有做我需要的事情 我需要的图表如下所示 这是在 Hi
  • MySQL Looped Join如何测试结果是否完整?

    情况 我有一个 mysql 目录表 每个目录都有一个父目录 存储为parentID 直到根目录的parentID为0为止 E g rowID 1 name Dir1 parentID 0 root directory rowID 2 nam
  • 有什么方法可以预测会话超时吗?

    有没有办法 捕获 会话超时事件 以便在 HttpSession 失效之前检索数据 我们正在实现 Filter 接口 并且在 doFilter 方法中 当会话超时时 我们在登录时存储在会话对象中的用户为 null 提前致谢 您应该能够注册Ht
  • iOS 提交问题与应用内购买

    我已经上传了包含两次应用内购买的应用程序 4 天后 我收到了此消息和 iTunes Connect 状态 您的应用内购买已被退回 您必须修改或删除突出显示的项目 两项应用内购买均以警告标志突出显示 并表示开发人员需要采取行动 关于问题是什么
  • 如何命名构造函数参数和成员变量?

    我在命名类的内部变量时不使用前缀 我知道有些这样做 但我不会开始 你为什么 辩论 我只是更喜欢这样 问题是有时在构造函数中传递相同的参数 我最终对如何命名它们感到困惑 例如 public class SampleClass private
  • 在 SignalR 中序列化/反序列化派生对象

    我将 SignalR 1 1 与 NET 客户端一起使用 我的集线器中有一个方法 它接受 BaseMessage 类的对象并将其广播给所有客户端 public void SendMessage BaseMessage message Cli
  • Android - 如何在代码中设置首选项

    我有一个 Android 应用程序 其中我的首选项位于 XML 文件中 运行良好 我现在想使用代码设置其中一个首选项 而不是显示整个首选项屏幕 我将如何执行此操作 我假设您所指的首选项是指应用程序的首选项 而不是 Android 手机设置
  • Spring Boot 与 Spring Batch 和 JPA 集成

    我正在将 Spring Boot 项目与 Spring Batch 和 Data jpa 项目集成 与作业和数据配置相关的所有内容都是正确的 除了将我的作业编写器结果保存在数据库中 在我读取文件并处理它之后 我无法将其写入 mysql 数据
  • 将整数拆分为其数字 C++

    我正在尝试自学 C 但遇到了一些障碍 问题是我需要取一个整数 将其拆分为数字并获取数字之和并显示它们 Example 输入号码 123456整数中的数字 1 2 3 4 5 6 sum 21 我已经完成了这一切 但是当我将整数撕成数字时 我
  • 如何在android中隐藏光标的特定行

    我有一个光标 它有 40 行 我想在用户选中复选框时隐藏一些行 一种方法是在游标上再次运行查询 但这对我没有帮助 因为条件是由Java完成的 计算余额 有很多逻辑 我需要一些东西来获取当前行 并返回它是否可以显示 任何帮助将不胜感激 我继承
  • 从 ASP.NET 中的代码隐藏推进向导

    我的页面上有一个向导 它有一个 下一步 按钮 当单击页面上的另一个按钮时 我想从代码隐藏中 单击 该按钮 进一步来说 我的页面上有一个按钮有两个功能 单击它后 在回发中 它要么设置重新加载页面并显示弹出窗口所需的代码 要么在认为不需要弹出窗
  • 如何在sql server中的计算字段上设置外键约束?

    表 A 有一个名为 Computed1 的计算字段 它是persisted并且不为空 此外 它总是计算出 char 50 表达式 它也是唯一的并且具有唯一的键约束 表 B 有一个字段 RefersToCompulated1 它应该引用有效的
  • 是否可以使用VBA添加重复部分内容控制部分?

    我已经创建了Word模板重复部分电流控制 RSCC 含有其他内容控制 我还有 Excel 工作簿 其中包含应转到提到的 Word 模板的信息 我想做的事情是创建宏 该宏将使用 Excel 工作簿中选定行的信息填充 Word 模板 每行到新的
  • 如何同时有效地读取两个 BLE 设备的温度?

    首先 我正在使用RxAndroidBLE http polidea github io RxAndroidBle 管理我的 BLE 连接的库 我有两个我想同时读取两者的温度 例如 我想每 500 毫秒读取两个设备的温度 并将其在两个 Tex