在 Android 上同时与多个 BLE 设备进行稳健通信

2024-03-17

尽管没有记录,但使用 Android BLE api 的传统观点是,某些操作(例如读/写特性和描述符)应该一次完成一个(尽管某些设备比其他设备更宽松)。但是,我不清楚此策略是否应仅适用于单个连接,还是适用于所有活动连接。

我听说最好一次启动与一个设备的连接。这可能是应该在所有设备之间串行执行的操作(connect / connectGatt)的示例。

但是对于其他操作,例如读取和写入特性,如果每个连接串行执行操作就足够了,还是我需要在所有设备之间共享一些全局操作队列,以便在所有设备之间只有一个操作正在执行?


在安卓上,每个 BluetoothGatt 对象您一次只能执行一项操作(请求 mtu、发现服务、读/写特征/描述符),否则会出错。您必须等到相应的回调被调用后才能执行下一步操作。

关于同时与多个设备的挂起连接,如果您使用 autoConnect=true 则没有问题,但如果您使用 autoConnect=false 则 Android 的蓝牙堆栈一次只会尝试连接到一台设备,这意味着它将排队如果有多个未完成的连接请求。有一个特定的错误,它无法取消仍在队列中的挂起连接(当您调用 .disconnect() 或 .close() 时),但是,最近在 Android 中修复了该错误。

请注意,还有一个最大数量的连接/挂起连接/gatt 对象,其行为完全没有记录,当超过这些限制时会发生什么。在最好的情况下,您只需得到带有错误状态的回调,但在某些情况下,我发现 Android 蓝牙堆栈陷入无限循环,在每次迭代中它都会告诉蓝牙控制器连接到设备,但控制器发回错误代码已达到最大连接数。

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

在 Android 上同时与多个 BLE 设备进行稳健通信 的相关文章

随机推荐

  • 使用 #!/usr/bin/php 时自定义 php.ini

    我有一个脚本 我试图在其中加载自定义php ini文件 该脚本通过以下方式在 nix 系统上运行 usr bin php qc path to php ini标头 然而 当这样做时 PHP 报告加载的php ini文件不存在 即没有加载 如
  • 在 ondrag 事件期间,pageX 和 pageY 在 Firefox 中始终设置为 0

    我正在实现一个可视化编辑器 允许用户将图像拖动到页面上 并将其他图像拖动到这些先前拖动的图像中 类似于 添加另一个图像 我基本上只需要拖动过程中的鼠标坐标 元素 hiliting 等 我使用基于这些坐标的自定义函数 问题是 在 Webkit
  • 升级 @ngrx/Store 时,“Action”类型上不存在属性“payload”

    我有 ngrx store打包在我的 Angular 4 x 应用程序中 并从 v 升级2 2 2 gt v4 0 0 我可以看到迁移注释说 Payload 属性已从 Action 接口中删除 然而 他们给出的例子似乎完全违反直觉 在我看来
  • 整个网页使用一个文件的优点和缺点? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不知道该怎么表达 但我会尝试一下 我最近开始用面向对象的 PHP 编写我的作品集 我想知道使用内容根据 SQL 数据和 GET 变量
  • 如何从 Android Fragment 禁用或隐藏抽屉布局

    我的应用程序中有 10 个不同的片段 我需要在几个片段中隐藏导航抽屉 抽屉布局 如何从片段访问抽屉布局并隐藏它 我知道我们需要在活动中使用mDrawerLayout setDrawerLockMode DrawerLayout LOCK M
  • VS 2010无法打开源文件“字符串”

    突然之间 我的 VS 2010 项目中的 Intellisense 开始变得疯狂 一切都正确构建 但它无法再找到基本的 C 头文件 如字符串 映射等 它不再识别 std 命名空间 而且通常会变得混乱 代码仍然可以编译 但无论我做什么 我都无
  • 服务器宕机时移动 SVN 存储库

    我的 SVN 服务器死了 我有另一台可以用作 SVN 服务器的机器 还有几台带有原始存储库的工作副本的机器 是否有一种干净的方法可以仅从当前工作副本在新服务器上重新创建存储库 历史是可以被遗忘的 我尝试创建一个新的存储库 破解其 UUID
  • 如何将字符串与整数进行比较

    In SQL Server 2012 我有一组列定义为VARCHAR 这些值是指标的阈值 可以是数字或字符串值 例如 温度的阈值是数字0 and 100 而门的阈值是open and closed 我想测试一个值 ResponseValue
  • 如何使 new FormData() 在 IE 浏览器上工作

    我怎样才能让这个在 IE 上工作 这在 IE 上不起作用 IE 浏览器不支持 new FormData api 是否有其他 api 相当于 IE 中的 new FormData var fd new FormData fd append u
  • Google Apps Script V8 分配给 null 会取消调试

    将变量赋值为 null 会导致调试取消该行的执行 这是重现该问题的测试脚本 function myFunction var a Hallo Logger log a a var b null Logger log b b 调试时 此脚本执行
  • 如何将日期正确转换为 UTC 然后再转换回来?

    我正在努力将 DateTime 转换为 UTC 概念以及所有我无法正确理解的内容 当我得到一个日期时间字符串 比如 7 10 2013 时 我只是这样做 Convert ToDateTime 7 10 2013 ToUniversalTim
  • PyGObject 中的 TreeView 拖放:未调用拖拽数据删除?

    我正在研究如何在 PyGObject 的 TreeView 中进行拖放的示例 我有一些不明白的事情 为什么是drag data delete函数从未被调用 这是独立的示例 from gi repository import Gtk Gdk
  • Google 应用程序脚本在 Google 表单提交后触发两次

    我的脚本在 Google 表单和链接的表格中运行两次时遇到问题 我有一个表单提交触发器 如果我删除此触发器 则脚本根本不会在表单提交上运行 如果我重新添加触发器 它将触发两次 但工作表响应中只有一个表单提交 我想也许我点击了表单提交两次 但
  • 使用对数标度在 R 中实现随机游走 Metropolis Hastings

    Context 我几乎到处寻找 但找不到使用对数尺度的随机游走 Metropolis Hastings 算法的完整实现 通过对数尺度 我的意思是我们正在使用目标分布的对数 通常是后验 为了简单起见 我在这里有一个最小的工作示例R但我也会很高
  • 在选择器列表中使用 @at-root 和 &

    我有一个 CSS 我尝试将其迁移到 SASS 其中包含许多结构 例如 btn primary hover btn primary focus btn primary active btn primary active open dropdo
  • 如何在executeBatch()之前检查Prepared Statement是否有批次?

    我对Java中的Prepared Statement有疑问 因为我对此了解不多 我有一个必须使用PreparedStatement 的用例 但我在编写代码之前只是想 while if preparedStatement setString
  • 如何标记 Perl 源代码?

    我有一些合理的 未混淆的 Perl 源文件 我需要一个标记生成器 它将其分割为标记 并返回每个标记的标记类型 例如对于脚本 print Hello World n 它会返回这样的内容 关键字5字节 空白 1 字节 双引号字符串 17 字节
  • 集成测试中的 MVC 策略覆盖

    我正在为 MVC 应用程序添加集成测试 我们的许多端点都应用了策略 例如 namespace WorkProject Route A Route public class WorkController Controller HttpPost
  • 根据另一个 DataFrame 选择一个 DataFrame 的列

    我试图根据另一个 DataFrame 的列选择 DataFrame 的子集 数据框看起来像这样 a b c d 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 3 12 13 14 15 a b 0 0 1 1 2 3 2
  • 在 Android 上同时与多个 BLE 设备进行稳健通信

    尽管没有记录 但使用 Android BLE api 的传统观点是 某些操作 例如读 写特性和描述符 应该一次完成一个 尽管某些设备比其他设备更宽松 但是 我不清楚此策略是否应仅适用于单个连接 还是适用于所有活动连接 我听说最好一次启动与一