一次与多个BLE设备进行通信

时间:2017-12-21 14:03:20

标签: java android multithreading bluetooth bluetooth-lowenergy

我在stackoverflow,nordicsemi devzone,在线教程等几乎每一个关于BLE的线程都读过,但仍然无法解决连接10>的问题。 BLE设备与android并行通信。我知道理论上android的限制是7,所以当我写10时我的意思是10个最小的时间。

设置是标准的。服务,GATT为每个设备,广播听众,leScanCallbacks等。

当少数设备与Android通信时出现问题,并且它发生在不同的通信步骤上。

案件是这样的:

一个设备已连接并正在通信,其次,第三个设备正在尝试连接但它仍然失败。成功连接第三个之后,两个新设备正在尝试连接但仍然失败。

当少数设备正在通信但处于不同步骤时,也会出现问题。一个是发现,第二个是读取电池电量,第三个是无法连接,直到这两个完成并断开/关闭。

有时响应没有来,在以编程方式设置超时请求后重试没有任何反应等等

我可以编写xy失败的案例,但不会有模式可以指出明显的错误,这是主要问题。唯一可以肯定的是存在某种碰撞并且"阻止"设备对我的广播接收器的响应但是这种冲突非常奇怪,因为Android设备当时支持7个连接,有时即使< 7设备同时通信,我也不会得到响应。

当我将通信设置为一个接一个(当前一个断开连接开始)时,一切顺利,但这需要时间和时间是我尝试异步同步最大设备数的主要原因。

我的问题是通过蓝牙进行多次通信是否可行,如果可以在Android上实现它?我看到iOS通过多个线程处理它的例子,但我不知道如何在android中使用广播接收器实现这一点,所以我将通信步骤放在不同的线程中,但它没有改变任何内容。

1 个答案:

答案 0 :(得分:1)

这是我如何使用BLE线程的示例: 从主Java启动它:

for user_group_detail in UserGroupHeader.objects.get(pk=9).usergroupdetail_set.all():
    category = user_group_detail.category
    print(category. description)

这是线程代码:

uartBluetoothLaser = new UartBluetooth(this, mHandler);
uartBluetoothRF = new UartBluetooth(this, mHandler);
btAdapter = bluetoothManager.getAdapter();
btAdapter.startLeScan(scanCallback);                                
uartBluetoothLaser.connect(mainActivity,btAdapter,bluetoothDevice);