Android 4.3:如何连接多个蓝牙低功耗设备

2023-12-11

我的问题是:Android 4.3(客户端)可以与多个 BLE 设备(服务器)建立活动连接吗?如果是这样,我怎样才能实现它?

到目前为止我做了什么

我尝试评估使用 BLE 和 Android 4.3 BLE API 可以实现的吞吐量。此外,我还尝试找出可以同时连接和激活多少设备。我使用 Nexus 7 (2013)、Android 4.4 作为主设备,使用 TI CC2540 Keyfob 作为从设备。

我为从站编写了一个简单的服务器软件,它通过 BLE 通知传输 10000 个 20Byte 数据包。我的 Android 应用程序基于应用加速器来自蓝牙 SIG。

它适用于一台设备,我可以在 7.5 毫秒的连接间隔下实现大约 56 kBits 的有效负载吞吐量。为了连接到多个奴隶,我遵循了一位北欧员工的建议,他在北欧开发区:

是的,可以使用单个应用程序处理多个从站。您需要使用一个 BluetoothGatt 实例来处理每个从属设备。您还需要为您连接的每个从站指定特定的BluetoothGattCallback。

所以我尝试了一下,部分有效。我可以连接到多个从站。我还可以注册多个从站的通知。当我开始测试时问题就开始了。我首先收到来自所有从站的通知,但在几个连接间隔之后,只有来自一个设备的通知出现。大约 10 秒后,其他从站断开连接,因为它们似乎达到了连接超时。有时,我从测试一开始就只收到来自一个从属设备的通知。

我还尝试通过读取操作访问该属性,得到相同的结果。经过几次阅读后,只有一台设备给出了答案。

据我所知,这个论坛上也有一些类似的问题:Android 4.3 支持多个 BLE 设备连接吗?, 原生 Android BLE GATT 实现具有同步性质吗? or BLE 多重连接。但这些答案都没有让我清楚,是否可能以及如何做到。

我将非常感谢您的建议。


我怀疑每个人添加延迟只是为了让 BLE 系统在您提交另一项操作之前完成您所要求的操作。 Android 的 BLE 系统没有任何形式的队列。如果你这样做

BluetoothGatt g;
g.writeDescriptor(a);
g.writeDescriptor(b);

那么第一个写操作将立即被第二个写操作覆盖。是的,这确实很愚蠢,文档可能应该提到这一点。

如果插入等待,它允许第一个操作在执行第二个操作之前完成。但这是一个巨大而丑陋的黑客行为。更好的解决方案是实现自己的队列(就像 Google 应该有的那样)。幸运的是 Nordic 为我们发布了一款。

https://github.com/NordicSemiconductor/puck-central-android/tree/master/PuckCentral/app/src/main/java/no/nordicsemi/puckcentral/bluetooth/gatt

编辑:顺便说一下,这是 BLE API 的普遍行为。 WebBluetooth 的行为方式相同(但 Javascript 确实使其更易于使用),而且我相信 iOS 的 BLE API 的行为方式也相同。

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

Android 4.3:如何连接多个蓝牙低功耗设备 的相关文章

  • Android webview 滚动不起作用

    我正在尝试在网络视图中向下滚动到页面底部 我正在使用谷歌在其教程中提供的网络视图示例 我正在使用这行代码来尝试滚动 但它不起作用 mWebView pageDown true 关于如何使其以编程方式滚动有什么建议吗 谢谢 public cl
  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • 在android中通过BLE传输图像

    我使用以下代码传输 1 MB 的图像 如果在每个数据包之间实现线程延迟 则图像将成功传输 如果未设置线程延迟 则所有数据包均从BluetoothGattServer 发送 但BluetoothGattCallback 不会接收所有数据包 任
  • FTS3 在 ORMLite 中搜索?

    我对 FTS3 一无所知 除了http developer android com guide topics search search dialog html http developer android com guide topics
  • 播放 SoundCloud 曲目

    我可以在 Android 应用程序中播放 SoundCloud 中的曲目吗 我正在尝试这段代码 但它不起作用 String res https api soundcloud com tracks 84973999 stream client
  • 从 React Native Js 代码调用 Android Native UI 组件方法

    我创建了一个 CustomView SignatureView java 它扩展了 LinearLayout 以捕获 Android Native 中的签名 并创建了SignatureCapturePackage java和Signatur
  • Android Library项目使用gradle在命令行编译时无法导入另一个库项目的R类

    我的 android 项目有这样的结构 ProjectDir settings gradle MyApp depends on LibraryA and LibraryB gt build gradle gt All the other a
  • 调整浮动操作按钮的图标大小(fab)

    The new floating action button should be 56dp x 56dp and the icon inside it should be 24dp x 24dp So the space between i
  • 如何在android中设置权限WRITE_SECURE_SETTINGS? [复制]

    这个问题在这里已经有答案了 我正在尝试启用 4 0 以上的辅助功能服务设置 但它显示异常 即 引起原因 java lang SecurityException 权限拒绝 写入安全设置需要 android permission WRITE S
  • 如何获得蓝牙低功耗设备的实际名称?

    我需要从 ble 传感器获取友好的设备名称 例如 我想找到该设备并告诉用户他们已连接到 我的家庭传感器 我可以找到该设备 但我不知道如何找到该数据 在常规蓝牙中 我相信我可以使用BLUETOOTH DEVICE INFO或winsock 是
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • 使用 PhoneGap 使 Android 应用程序易于访问(对于残障人士)

    有人有过使用 PhoneGap 使 Android 应用程序可访问的经验吗 至少我们需要使我们的应用程序符合第 508 条规定 我尝试实现一些标准的辅助功能 文本框标签 向 div 添加标题属性等 但是 当在 Android 中使用 Tal
  • Android FragmentTransaction 自定义动画(未知动画师名称:Translate)

    我正在尝试让自定义动画与我的片段一起使用 我已按照在线教程进行操作 但出现以下错误 java lang RuntimeException 未知的动画师名称 翻译 动画的 XML 如下
  • HERE 地图:更改路线已行驶部分的颜色

    导航时可以改变路线的颜色吗 具体来说 我希望路线中已行驶的部分的颜色与即将行驶的部分的颜色不同 现在都是同一个颜色 将 MapRoute 对象的 TravelColor 变量设置为透明对我来说很有效 mapRoute color Resou
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android
  • 如何在基本活动中使用 ViewBinding 的抽象?

    我正在创建一个基类 以便子级的所有绑定都将设置在基类中 我已经做到了这一点 abstract class BaseActivity2 b AppCompatActivity private var viewBinding B null pr
  • 单元测试时 Android Studio 2.0 中测试状态终止且没有任何失败消息

    Issue 我昨天在 Ubuntu 上从 1 5 升级到了 Android Studio 2 0 当我在 Android Studio 2 0 中进行单元测试时 即使所有测试都已通过 它也会显示 终止测试 状态 有时它只显示部分测试通过 我
  • 使用单选按钮更改背景颜色 Android

    我试图通过从单选组中选择单选按钮来更改应用程序选项卡的背景 但是我不确定如何执行此操作 到目前为止我已经 收藏夹 java import android app Activity import android os Bundle publi
  • Android 中带有组的列表视图

    我有一个列表视图 每行都有一些日期和文本 我可以像 iPhone 中那样将这个 listView 分组 组之间有标题吗 在 android 中是否可能 请帮忙 即 我需要在 Listview 行之间有标题栏 以便如果我使用日期对其进行分组
  • 如何在片段中实现 onBackPressed() 和意图?

    我知道 onBackPressed 是活动中的一种方法 但是 我想在片段中使用该功能 以便当按下后退按钮时 它会通过 Intent 重定向到另一个活动 有什么办法解决这个问题吗 public class News Events fragme

随机推荐