草庐IT

安卓 4.3 : How to connect to multiple Bluetooth Low Energy devices

coder 2023-06-05 原文

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

到目前为止我做了什么

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

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

它适用于一台设备,我可以在 7.5 毫秒的连接间隔下实现大约 56 kBits 的有效负载吞吐量。为了连接多个奴隶,我听从了一位北欧员工的建议,他在 Nordic Developer Zone 中写道。 :

Yes it's possible to handle multiple slaves with a single app. You would need to handle each slave with one BluetoothGatt instance. You would also need specific BluetoothGattCallback for each slave you connect to.

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

我还尝试通过读取操作访问属性,结果相同。经过几次阅读后,仅来自一台设备的答案就出来了。

我知道这个论坛上有几个类似的问题:Does Android 4.3 support multiple BLE device connections? , Has native Android BLE GATT implementation synchronous nature?Ble multiple connection .但是这些答案都没有让我清楚,如果可能以及如何做到这一点。

非常感谢您的建议。

最佳答案

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

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

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

如果您插入一个等待,它允许第一个操作在执行第二个操作之前完成。不过,这是一个巨大的丑陋黑客。一个更好的解决方案是实现你自己的队列(就像谷歌应该有的那样)。幸运的是,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 也有相同的行为方式。

关于安卓 4.3 : How to connect to multiple Bluetooth Low Energy devices,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21237093/

有关安卓 4.3 : How to connect to multiple Bluetooth Low Energy devices的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. 映宇宙2022年营收63亿元:同比下降三成,毛利率提升4.3个百分点 - 2

    3月26日,映宇宙(HK:03700,即“映客”)发布截至2022年12月31日的2022年度业绩财务报告。财报显示,映宇宙2022年的总营收为63.19亿元,较2021年同期的91.76亿元下降31.1%。2022年,映宇宙的经营亏损为4698.7万元,2021年同期则为净利润4.57亿元;期内亏损(净亏损)为1.68亿元,2021年同期的净利润为4.33亿元;非国际财务报告准则经调整净利润为3.88亿元,2021年同期为4.82亿元,同比下降19.6%。 映宇宙在财报中表示,收入减少主要是由于行业竞争加剧,该集团对旗下产品采取更为谨慎的运营策略以应对市场变化。不过,映宇宙的毛利率则有所提升

  3. (一)专题介绍:移动端安卓手机改造成linux服务器&linux服务器中安装软件、部署前后端分离项目实战 - 2

    快捷目录前言一、涉及到的相关技术简介二、具体实现过程及踩坑杂谈1.安卓手机改造成linux系统实现方案2.改造后的手机Linux中软件的安装3.手机Linux中安装MySQL5.7踩坑实录4.手机Linux中安装软件的正确方法三、Linux服务器部署前后端分离项目流程1.前提准备(安装必要软件,搭建环境):2.前后端分离项目的详细部署过程:总结前言总体概述:本篇文章隶属于“手机改造服务器部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目

  4. PyQt5数据库开发1 4.3 QSqlTableModel 之 相关槽函数的实现(多图长文详解) - 2

    目录一、打开数据库表1.写打开数据库的槽函数2.运行后发现数据库可以打开了

  5. 微信小程序安卓视频播放卡顿问题 - 2

    在微信小程序开发中遇到在video组件的两个问题1.安卓手机里播放视频会有明显的卡顿问题刚开始以为是网络问题,或者是视频文件问题。排查了一下发现都没问题最后加了个属性就OK了uniapp和原生小程序方法:custom-cache="false"custom-cache={{false}}video组件兼容iOS手机custom-cache加了这个属性会让2.iOS手机第一次播放视频会有几秒黑屏问题因此我加了当前手机型号的判断uni.getDeviceInfo().deviceType获取当前设备api当为iPhone时不加custom-cache属性,否则加上custom-cache=“fal

  6. 安卓渐变的背景框实现 - 2

    安卓渐变的背景框实现1.背景实现方法1.利用PorterDuffXfermode进行图层的混合,这是最推荐的方法,也是最有效的。2.利用canvas裁剪实现,这个方法有个缺陷,就是圆角会出现毛边,也就是锯齿。3.利用layer绘制边框1.背景万恶的设计小姐姐又来搞事情啦,你说好好的设计一个纯色的背景框框不好嘛,非要把一个框框弄成渐变的,如果不拿出放大镜估计没几个人能看出来它是渐变的。来,我让你看看是啥样框子是从左到右渐变的,设计应该是做了一个底图,然后上面盖了一个白色圆角矩形。那么我们该怎么去实现它呢?实现方法下面介绍三种实现它的方法。先贴上源码地址,大家记得给个starhttps://git

  7. 安卓手机浏览器:远程调试 - 2

    简介:有时我们需要调试手机浏览器网页信息,这时除了使用fiddler抓包拦截篡改,还可以通过USB连接,通过PC远程调试手机上的浏览器信息,进行映射。历史攻略:adb:安卓手机USB调试模式前置准备:网页内容在移动设备上的体验可能和电脑上完全不同。ChromeDevTools提供远程调试功能安卓远程调试支持:在浏览器选项卡中调试网站。在原生安卓应用中调试网页内容。将屏幕从你的安卓设备上投影到你的开发机器上。使用端口转发和虚拟主机映射来让安卓设备访问开发使用的服务器。操作步骤:1、手机通过USB连接电脑。2、开启手机调试模式。3、PC电脑edge输入:edge://inspect/#device

  8. 安卓性能优化之内存优化 - 2

    Java对象生命周期:创建:为对象分配内存空间,构造对象应用:此时对象至少被一个强引用持有不可见:未被任何强引用持有,进行可达性分析不可达:可达性分析为不可达,进入下一阶段收集:当垃圾回收器发现该对象已经处于“不可达阶段”并且垃圾回收器已经对该对象的内存空间重新分配做好准备时,则对象进入了“收集阶段”。如果该对象已经重写了finalize()方法,则会去执行该方法的终端操作。终结:当对象执行完finalize()方法后仍然处于不可达状态时(可达性分析垃圾回收算法被回收前,会有两次标记过程,判断是否执行lfinalize()方法,执行完之后判断是否GCROOT可达,如果仍不可达,则准备回收),则

  9. Qt安卓开发:调用java代码的获取usb权限 - 2

    最近换了工作,新工作是负责用qml做qt安卓开发。工作中遇到一个问题:安卓设备有USB口,需要插入一个U盘在程序里读写U盘中的文件,由于安卓系统的安全性的问题导致QFile、c++的文件操作相关方法都不能读写成功,想要读写成功只能调用java代码,在java代码里面使用安卓的DocumentFile库。经过一番探索,成功解决了问题。qt如何添加java代码不说了,网上有。下面是具体的java代码:packagecom.example.myapplication;importandroid.annotation.TargetApi;importandroid.content.Context;im

  10. Obsidian安卓端同步及使用(Remotely Save+阿里云同步S3) - 2

    Obsidian安卓端同步及使用(RemotelySave+阿里云同步S3)强烈推荐的obsidian的markdown教程​obsidian这款软件很不错,最近刚入门,用来做笔记,喜欢在电脑上做笔记,手机端能随时查看,故捣鼓了一下安卓端的同步及安卓端的使用1.安装包获取​不能科学上网,我是到官方中文论坛上找到的,网址如下:移动端v1.4.1开始测试-Obsidian中文论坛2.电脑端同步+阿里云配置​我使用的是RemotelySave插件​首先,电脑端关闭安全模式,下载这个第三方插件,登不上的看这里,网址如下:完美解决obsidian无法加载第三方插件(社区插件)的问题​然后就是阿里云的同步

随机推荐