我记得在三星BLE API(存档页面)的"指南和提示" -doc中阅读:
三星F/W和堆栈最重要的概念之一是它的同步特性.也就是说,如果我们调用例如
writeCharacteristic某个特定的特性,如果它返回true,则在收到回调后应该对anyBluetoothGatt或BluetoothGattServer方法进行下一次调用onCharacteristicRead.这是因为堆栈被设计为一次仅支持和处理一个GATT调用,例如,如果您在第一个调用之后很快调用writeCharacteristic或readCharacteristic处理任何特性,则忽略它.
我正在开发一个连接到BLE设备并读取Gatt服务和Gatt特性的Android应用程序.我使用Android开发站点的BluetoothLeGatt示例项目作为参考.
到目前为止,我能够以编程方式连接到设备(我注意到我的设备地址能够执行此操作)并通过记录UUID过滤掉我想要读取的特定Gatt服务以及服务的特定特征服务和特征.当我的BLE设备向我的Android应用程序发送消息时,Google提供的示例也会更新.总的来说,我没有遇到任何问题.
但是,在GATT上进一步阅读后,我发现可以使用单个Android应用程序(作为主OR客户端 - 连接到多个BLE设备(所有从属设备或服务器 - 发送数据的设备))接收所述数据).所以我试图做的是拥有2个BLE设备(不同的地址),记下他们的地址,然后我的应用程序尝试连接到它们,一旦应用程序看到这两个地址启动并运行.
在代码中,当我看到我的2个BLE设备时,我会调用此函数:
private void connectToDevice(){
mDeviceName = deviceList.get(currentIndex).getName();
mDeviceAddress = deviceList.get(currentIndex).getAddress();
Log.e(TAG, "connecting to device name = " + mDeviceName);
mBluetoothLeService.connect(mDeviceAddress);
}
Run Code Online (Sandbox Code Playgroud)
当currentIndex最初设置为零.然后,一旦我成功连接,我会:
private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (BluetoothLeService.ACTION_GATT_CONNECTED.equals(action)) {
Log.e(TAG, "connected");
mConnected = true;
if(currentIndex < deviceList.size()-1) currentIndex ++;
connectToDevice();
}
}
};
Run Code Online (Sandbox Code Playgroud)
在哪里检查我是否仍然有设备连接到我的deviceList,如果是这样,增加我的计数器,然后连接,直到我耗尽我的列表中的所有内容.
但是,我似乎完全没有使用这种方法.
请注意,我的设备之间无法切换连接(循环).当我拥有大量设备时,这将是一个问题,重要的是让他们的消息实时无延迟.这就是说,我必须有一个与我的设备的实时连接.
有没有人试图连接到Android中的多个BLE设备?我不确定如何继续这个.
是否可以通过蓝牙低功耗连接多个传感器标签?在TI提供的应用程序中,传感器标签是服务器,应用程序是客户端.那么,单个客户端可以连接多个服务器吗?
我们正在开发一款Android应用程序,它可以通过Bluetooth Low Energy同时连接多个心率传感器.
我们有一个很好的实现,所以代码不是问题.令我们发疯的是平行BLE连接的限制,这似乎与设备不同.
我们这里有一些测试设备:摩托罗拉MotoE和MotoG,三星Galaxy Tab A和HTC Nexus 9.所有这些都运行Android 5或6,原始供应商版本.它们都不能同时连接到7个以上的BLE HR传感器.
然后我测试了我的私人三星Galaxy S4,它已经安装了Cyanogen CM12.使用此设备,我可以轻松连接到12个HR传感器,这是我们想要通过我们的应用程序实现的数字.
我已经使用我们自己的应用程序实现和Nordic Semiconductor nRF主控制面板测试了这一点,我认为这是一个非常好的通用BLE应用程序:https://play.google.com/store/apps/details? id = no . nordicsemi.android.mcp&HL =德
当我尝试将应用程序连接到任何设备上的第7个BLE传感器时,ADB输出会输出以下错误消息:E/BluetoothLeBasicConn:连接状态更改错误:133
关于整个问题我做了一些非常密集的谷歌搜索,但我发现的大部分结果都很老了.有人说,限制来自蓝牙芯片组本身,其他人表示这是通过Android的软件限制.
你能帮我找出限制来自何处?
如果是芯片组,那么我想知道,我们应该使用哪些设备来支持尽可能多的并行连接.遗憾的是,很难找出不同设备中内置的蓝牙芯片组.几乎没有我发现的任何硬件规格说明了这一点.
如果限制来自软件方面,我们可以在不使用手机或安装改装操作系统的情况下以某种方式更改它吗?
非常感谢你!